接下来,将通过Cryptodome库函数(有关Cryptodome库函数的相关介绍详见 6.2节)实现对字符串进行DES加密。由于DES为分组密码的加密方式,其工作模 式有五种:ECB 、CBC 、CTR 、CFB 、OFB 。下面将以ECB模式为例,对字符串 进行DES加密。
1.DES加密
示例代码如下:
>>> from Cryptodome .Cipher import DES >>> import binascii >>> key = b 'abcdefgh ' # key的长度须为8字节 >>> des = DES .new(key, DES .MODE_ECB) # ECB模式 >>> text = 'ms08067 .com ' >>> text = text + (8 - (len(text) % 8)) * '= ' >>> encrypt_text = des .encrypt(text.encode()) >>> encryptResult = binascii.b2a_hex(encrypt_text) >>> print(text) >>> print(encryptResult) |
运行结果: |
ms08067 .com===== b 'b81fcb047936afb76487dda463334767 ' |
2.DES解密 示例代码如下: |
>>> from Cryptodome .Cipher import DES >>> import binascii >>> key = b 'abcdefgh ' # key的长度须为8字节 >>> des = DES .new(key, DES .MODE_ECB) # ECB模式 >>> encryptResult = b 'b81fcb047936afb76487dda463334767 ' >>> encrypto_text = binascii.a2b_hex(encryptResult) >>> decryptResult = des .decrypt(encrypto_text) >>> print(decryptResult) |
运行结果: |
b ' ms08067 .com===== ' |
DES加密方式存在许多安全问题。例如,密钥较短可被穷举攻击,存在弱密
钥和半弱密钥等。因此,美国NIST在1999年发布了一个新版本的DES标准
3DES 。3DES加密算法的密钥长度为168位,能够抵抗穷举攻击,并且3DES底层 加密算法与DES相同,许多现有的DES软硬件产品都能方便地实现3DES ,因此在 使用上也较为方便。
在CTF比赛中往往会利用DES加密算法的密钥较短、弱密钥等安全问题获取 flag 。一些白帽子在渗透测试过程中会发现拦截的数据包被DES加密,此时,可以 考虑DES为对称加密算法,在JavaScript前端代码中寻找相应的key值进行破译。