Python TripleDES(3DES)Hexa输入加密

2024-07-02 13:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

python3des没有输出正确的答案。你知道吗

    import pyDes
    import binascii

    text = '111122223333AAAA44446666BBBBEEEE'
    binaryText = binascii.unhexlify(text)

    key = '123412341234ABCD'

    k = pyDes.triple_des(key, pyDes.ECB)

    encrypted = k.encrypt(binaryText)

    print("Encrypted Value = %r" % binascii.hexlify(encrypted))

    # decrypted = k.decrypt(encrypted)
    # print("Decrypted Value = %r" %binascii.hexlify(decrypted))

加密值应为:569F2551E1749FEE9221B20C4F76CD4B

3DES在线工具:http://tripledes.online-domain-tools.com/


Tags: key答案textimportvalueencryptedtripleprint
1条回答
网友
1楼 · 发布于 2024-07-02 13:35:48

代码中有两个原因导致结果不同:

  • 指定为十六进制字符串的键不会转换为其二进制表示形式。

  • 使用了错误的密钥大小:TDES基于DES并使用了三个DES密钥K1、K2、K3。它执行三轮DES:第一轮用K1加密,第二轮用K2解密,最后第三轮用K3加密。支持三个keying options:3TDEA是最强的变体,使用三个独立的DES键。2TDEA使用两个独立的键K3=K1。1TDEA使用三个相同的密钥K3=K2=K1,因此它被简化为DES,并且DES的安全性是最不安全的变体。你知道吗

    Web Site上,使用键123412341234ABCD意味着1TDEA。^另一边的{a5}只显式支持2TDEA和3TDEA,但不支持1TDEA,因为只允许16字节和24字节的键。但是1TDEA可以通过使用键123412341234ABCD123412341234ABCD123412341234ABCD123412341234ABCD123412341234ABCD来实现。

因此Python代码提供了网站的结果

key = '123412341234ABCD'

必须替换为

#key = '123412341234ABCD'                                   # 8 bytes key works for DES, but fails for TDES
#key = '123412341234ABCD123412341234ABCD'                   # 16 bytes key or               
key = '123412341234ABCD123412341234ABCD123412341234ABCD'    # 24 bytes key works for TDES
key = binascii.unhexlify(str.encode(key, 'Utf-8'))          # convert hexadecimal string to binary data

请注意,代码在几个方面是不安全的:首先,1TDEA实际上具有DES的优势,因此是不安全的。即使TDES与3TDEA变体一起使用(安全性与AES相当),也应该使用性能更高的AES。其次,ECB模式是不安全的。你知道吗

相关问题 更多 >