AES,RSA,MD5/SHA1,DES区别

这五个都是加密算法,各有优势,用于各种不同的场景。

AES:更快,兼容设备,安全级别高
RSA:非对称加密,有公钥和私钥
MD5、SHA1:都是不可逆的,防篡改的,用来校验数据真伪的,不是用来加密数据的
DES:本地数据,安全级别低,被废弃了

AES:—>更快,兼容设备,安全级别高:
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

RSA —>非对称加密,有公钥和私钥:
公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。这两个密钥是数学相关,用某用户公钥加密后所得的信息,只能用该用户的解密的私钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。

MD5、SHA1—>都是不可逆的,防篡改的,用来校验数据真伪的,不是用来加密数据的:
MD5、SHA1的相同点:
MD5 与SHA-1均是从MD4 发展而来的,都是用来帮你验证这个数据、程序是否被别人修改,
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5、SHA1值都有很大区别。
压缩性:任意长度的数据,算出的MD5、SHA1值长度都是固定的。
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5、SHA1的区别:
SHA-1与MD5 的最大区别在于其摘要比MD5 摘要长 32 比特,MD5是 264 是数量级的操作,SHA-1 是280 数量级的操作。因而,SHA-1 对强行攻击的强度更大。但由于SHA-1 的循环步骤比MD5 多(80:64)且要处理的缓存大(160 比特:128 比特),SHA-1 的运行速度比MD5 慢。

DES—>本地数据,安全级别低,被废弃了
DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,distributed.net与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。也有一些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应用。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。另外,DES已经不再作为国家标准科技协会(前国家标准局)的一个标准。

下面是针对用上了MD5、AES、RSA加密算法的一个案例,有感兴趣的同学可以了解参考:
客户端加密大概流程:
1、data—MD5—>sign, sign+data—AES通过tempAESKey加密—->加密数据(data),
2、tempAESKey—RSA通过公钥加密—>encryptkey ,
3、然后发送给服务端 比如 {“data”:”xxxx”,”encryptkey”:”xxxx”}
服务端解密大概流程:
1、encryptkey—RSA通过私钥解密—>TempAesKey
2、data—AES通过TempAesKey解密 —>明文data
3、md5通过sign 校验数据真伪。

TempAesKey:客户端随机生成的AESKey,用于对业务数据AES加密(长度为16位,可以用26个字母和数字组成)
AbsPublicKey:客户端发布时埋在应用程序代码里的加密公钥,用于对TempAesKey进行加密。
AbsPrivateKey:解密私钥,保存在服务端,用于对TempAesKey解密。

客户端对请求消息的加密处理详细步骤:

  1. 生成业务参数,业务参数为完整的json格式数据。例如:
    {“PlatID”:1,”CommandID”:1, “DeviceType”:100,”NodeID”:”111”,”Version”:1}
  2. 对整个业务参数串做md5摘要
    sign=md5(“{“PlatID”:1,”CommandID”:1, “DeviceType”:100,”NodeID”:”111”,”Version”:1}”);
  3. 将md5摘要跟业务参数串合并成明文串,摘要放在前面,通过“#”间隔,例如:
    sign#{“PlatID”:1,”CommandID”:1, “DeviceType”:100,”NodeID”:”111”,”Version”:1}
  4. 随机生成单次请求加密密钥tempAesKey
  5. 通过TempAesKey对拼接后的明文串进行加密生成通信密文,AES模式ECB/PKCS5Padding
    String data = AES.encryptToBase64(明文串, TempAesKey);
  6. 通过AbsPublicKey将TempAesKey加密成密文,RSA模式RSA/ECB/PKCS1Padding
    String encryptkey = RSA. encryptToBase64 (TempAesKey, AbsPublicKey);
  7. 向服务端发生HTTP POST请求,包体数据包括data、encryptkey和密钥版本version,例如:
    {“data”:”xxxx”,”encryptkey”:”xxxx”}

服务端对请求消息的解密处理详细步骤:

  1. 用AbsPrivateKey将encryptkey解析成明文TempAesKey。
    TempAesKey = RSA.decrypFromBase64(encryptkey, AbsPrivateKey);
  2. 用tempAesKey将接口返回的业务密文data解密成明文
    String plaintext = AES.decryptFromBase64(data, TempAesKey);
  3. 从plaintext解析出md5摘要和业务参数串
  4. 对业务参数串做md5摘要,与解析出来的摘要进行对比
  5. 对业务参数串做json解析

猜你喜欢

转载自blog.csdn.net/HuangTieBing/article/details/72886581
今日推荐