DES
对称加密算法DES
对称加密算法不仅在软件行业使用,在硬件行业也有很多使用。为什么叫对称加密算法呢?因为这种加密算法的加密秘钥=解密秘钥,是一种初等的加密算法,常见的有DES算法,但是由于DES的秘钥长度不够,所以衍生出了3DES(三重DES),它的秘钥要长了很多,可正因为秘钥长了,性能降低了,又出现了叫AES、PBA、IDEA的算法。
DES又名Data Encryption Standard (数据加密标准),DES的出身比较好,他是由于美国的国家标准研究所提出需求,IBM提交的。但是,1998年后DES是不断的被破解,因此在实际使用中DES已经不具备安全性。现在如果是新作的项目、或者没有使用加密算法将要使用的系统中不建议使用DES,DES的出现在一些介绍呀、案例呀、比较老的项目中。
秘钥长度 | 默认 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
56 | 56 | ECP、CBC、PCBC、CTR、CTS、CFB、CFB8到128、OFB、OFB8到128 | NoPadding、PKCS5Padding、ISO10126Padding | JDK |
64 | 56 | 同上 | PKCS7Padding、ISO10126d2Padding、X932Padding、ISO7816d4Padding、ZerobytePadding | BC |
不同的工作模式、填充方式,决定了DES算法在破解上的难度。
todo 工作模式:
工作模式 | 解释 |
---|---|
ECP | |
CBC | |
PCBC | |
CTR | |
CTS | |
CFB | |
CFB8到128 | |
OFB | |
OFB8到128 |
todo 填充方式:
填充方式 | 解释 |
---|---|
NoPadding | |
PKCS5Padding | |
ISO10126Padding | |
ISO10126d2Padding | |
X932Padding | |
ISO7816d4Padding | |
ZerobytePadding |
3DES
为什么会有3重des算法?是因为des算法被很多密码学机构质疑,因为它的算法是半公开的,这一点违反了柯克霍夫原则,所以很多密码学机构不推荐使用des,而且更多的人怀疑美国的安全局会在des安装一些后门,以达到截取信息的目的,这也是des广受诟病的原因之一。
3DES的好处:
- 密钥长度增强
- 迭代次数提高(说到迭代次数,其实也会有二重、四重des)
3DES又叫 Triple DES 或者 DESede
秘钥长度 | 默认 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
112、168 | 168 | ECP、CBC、PCBC、CTR、CTS、CFB、CFB8到128、OFB、OFB8到128 | NoPadding、PKCS5Padding、ISO10126Padding | JDK |
128、192 | 168 | 同上 | PKCS7Padding、ISO10126d2Padding、X932Padding、ISO7816d4Padding、ZerobytePadding | BC |
AES
之前有了DES、3DES,为什么会有AES呢?是因为A比D的级别高一点?不是,是因为DES的算法有些漏洞,3DES的算法相对来说比较低、处理速度比较慢,这才是AES出现的原因,并且AES是目前使用最多的对称加密算法。
AES还有一个优势是官方并未报道它已经被破解了,AES通常用于移动通信系统的加密、基于SSH协议的软件(如SSH Client、SecureCRT)。
AES是比DES更高级的算法,是DES的替代者,当一个东西被另一个东西替代,替代者往往比被替代者更牛一些、更高级一些,这是替代者的一些特点。
秘钥长度 | 默认 | 工作模式 | 填充方式 | 实现方 |
---|---|---|---|---|
128、192、256 | 128 | ECP、CBC、PCBC、CTR、CTS、CFB、CFB8到128、OFB、OFB8到128 | NoPadding、PKCS5Padding、ISO10126Padding | JDK(256位秘钥需要获得无政策限制权限文件) |
同上 | 同上 | 同上 | PKCS7Padding、ZerobytePadding | BC |
注:
无政策限制权限文件 :指美国对于软件出口的一些限制才有的
PBE
我们看到了AES、DES、3重DES在实现上是非常非常接近的,只是个别的参数不同,其实在使用上没啥不同的。但是,PBE算法综合了对称加密算法、消息摘要算法的优势,形成了一个特殊的对称加密算法,这也就是PBE名字古怪的原因。
PBE 又叫Password Based Encryption(基于口令加密),特点在于口令是由用户自己来管理的,但是通常这个口令又不会特别的复杂,就是不会像BASE64编码搞出来的复杂的那么难记,通常口令是比较简单容易记的,在这种方式下,口令其实很容易被穷举的方式破译,我们也知道其实网上有一些黑客会用穷举不停找相应的内容来达到破解的目的,对于这种情况,我们通常的方式是通过加盐来处理,什么意识呢?就是通过额外的引入东西去扰乱,这就是PBE算法的特点,采用的是口令替代了DES、AES算法里的秘钥。
其实,在PBE里并没有新的计算方式产生,而只是对于已有算法的包装。实现方也是有JDK、BC,实现方式有PBEWithMD5AndDES等
算法 | 秘钥长度 | 默认 | 工作模式 | 填充方式 | 实现 |
---|---|---|---|---|---|
PBEWithMD5AndDES | 64 | 64 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithMD5AndRC2 | 112 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHA1AndDES | 64 | 64 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHA1AndRC2 | 128 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAndIDEA-CBC | 128 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd2-KeyTripleDES-CBC | 128 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd3-KeyTripleDES-CBC | 192 | 192 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd128BitRC2-CBC | 128 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd40BitRC2-CBC | 40 | 40 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd128BitRC4 | 128 | 128 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAnd40BitRC4 | 40 | 40 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithSHAAndTwofish-CBC | 256 | 256 | CBC | PKCS5Padding、PKCS7Padding、ISO10126Padding、ZeroBytePadding | BC |
PBEWithMD5AndDES | 56 | 56 | CBC | PKCS5Padding | JDK |
PBEWithMD5AndTripleDES | 112、168 | 168 | CBC | PKCS5Padding | JDK |
PBEWithSHA1AndDESede | 112、168 | 168 | CBC | PKCS5Padding | JDK |
PBEWithSHA1AndRC2_40 | 40~1024(8的倍数) | 128 | CBC | PKCS5Padding | JDK |
总结
DES、3DES、AES的秘钥可以使用程序的方式生成,也可以双方约定一个相同的秘钥如“12345678”