python实现DES3加密
des加密,是一种对称加密算法,一种比较传统的加密方式;3DES(又称Triple DES),是进行了三重数据加密,即:每个数据块进行了三次DES加密算法,故比DES加密更为安全,更难破解。
DES加密的密钥长度为8,而DES3的密钥长度为24.
下面的代码实现是DES3,而DES加密只要把相关DES3的部分替换为DES即可,DES包的导入和方法调用与DES是一样,但是需要注意密钥长度。
与AES的加密实现方式基本相同,区别点在于:
- DES3需要把待加密文本补齐为8的倍数,AES需要把待加密文本补齐为16的倍数;
- DES3密钥长度为24,AES的密钥长度为32。
1 | import base64 |
注意:这里我在解密的时候,加了两行处理代码1
2unpadding = ord(msg[len(msg)-1])
msg[0:len(msg)-unpadding]
上面提到了,在文本加密之前,都需要把文本补成8的倍数,所以如果在加密之前进行过补齐操作,解密之后,末尾会多出我们补进去的字符。所以我们需要去掉补进去的字符。
我们这里补齐的逻辑是,先计算需要补进去的字符长度记为x,然后补进去的字符是x个ASCII值为x的字符。所以解密后,先计算最后一个字符的ASCII值,也就知道补了几个字符,最后截断即可。
那么有个问题,如果原文本正好是8的倍数,不需要补,那这里面的截断操作不就有问题了?实际上,即使原文本长度正好为8的倍数,也是会在最后补的,直接补8个字符。
AES加密也可以利用同样的方式删除加密前补进去的字符。