java密码学学习整理--对称加密(着重描述3des)

1.对称加密要点 

       对称加密算法的核心是加密和解密操作使用同一套密钥。加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。


2.des(参考自:http://baike.baidu.com/view/878529.htm?from_id=210508&type=syn&fromtitle=DES&fr=aladdin

       DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位(每组的第8位作为奇偶校验位),产生最大 64 位的分组大小。这是一个迭代的分组密码,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 轮循环,使用异或置换代换移位操作四种基本运算。


3.三重des


3.1.加密过程

它使用3条56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法。DES使用56位密钥和密码块的方法,
而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。
3DES(即Triple DES)是DES向AES过渡的加密算法(1999年,NIST将3-DES指定为过渡的加密标准),加密算法,其具体实现如下:设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密文,这样:
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1(EK2(Dk3(C)))

3.2.密钥说明
3des是用3个或2个des密钥加密一串明文,最少112位最多168位。也就是14~21个字母或数字符号。

从安全性上来说密钥位数不足是不能加密的,但有些软件为了保证用户可用,会自动使用某种策略自动填充满,一般是重复填充或采用特定字符,如果你只填了1234作为密钥,有可能真正用于加密的密钥是123412341234123412341或者123400000000000000000类似的。
final byte[] keyBytes = {0x11, 0x22, 0x4F, 0x58, (byte)0x88, 0x10, 0x40, 0x38
                               , 0x28, 0x25, 0x79, 0x51, (byte)0xCB, (byte)0xDD, 0x55, 0x66
                               , 0x77, 0x29, 0x74, (byte)0x98, 0x30, 0x40, 0x36, (byte)0xE2};    //24字节的密钥(168:3x56位+3x8)

3.3 密钥的分发

        密钥的分发是至关重要的。

在3des加密的传输数据系统中,经常先用非对称的加密算法的公钥对3des密钥进行加密,然后传递到目的端,目的端再用私钥进行解密得到3des的密钥。也可用比较轻量级的做法:在发送端对密钥进行位运算(密钥混淆),在目的端对混淆后的密钥进行逆反的位运算。





java密码学学习整理--对称加密(着重描述3des),布布扣,bubuko.com

java密码学学习整理--对称加密(着重描述3des)

上一篇:python直接生成exe的方法


下一篇:JAVA代码规范笔记(下)