Python中使用Crypto.Cipher的DES3进行3DES加密时,如何处理32位秘钥的问题?

key = 'pjmev8py0muojez80um25zu008uxkejn’
txt = '01’

txt 加密后的文本是 v13SfS4+v8s=

但是 3des 只支持 16 或者 24 位的,想问一下要怎么转换?
Python中使用Crypto.Cipher的DES3进行3DES加密时,如何处理32位秘钥的问题?

2 回复

3DES的密钥长度应该是24字节(192位)。你提到的32位(4字节)密钥长度不符合标准。通常有两种情况:

  1. 如果你确实有一个32字节的密钥:这可能是其他加密算法(如AES-256)的密钥长度。对于3DES,你需要将其转换为24字节:
from Crypto.Cipher import DES3
from Crypto.Util.Padding import pad

# 假设你有一个32字节的密钥
key_32bytes = b'12345678901234567890123456789012'  # 32字节示例

# 转换为24字节:取前24字节或进行其他转换
key_24bytes = key_32bytes[:24]  # 简单截取前24字节

# 创建3DES cipher
cipher = DES3.new(key_24bytes, DES3.MODE_ECB)

# 加密示例
data = b'Hello World'
encrypted = cipher.encrypt(pad(data, DES3.block_size))
  1. 如果你误将32位(4字节)当作密钥:这太短了,需要扩展。3DES支持双密钥模式(16字节)和三密钥模式(24字节):
# 如果只有4字节密钥,需要扩展
short_key = b'1234'  # 4字节

# 方法1:重复填充到24字节(安全性较低)
key_24bytes = short_key * 6  # 重复6次得到24字节

# 方法2:使用密钥派生函数(推荐)
from Crypto.Protocol.KDF import PBKDF2
salt = b'some_salt'
key_24bytes = PBKDF2(short_key, salt, dkLen=24, count=100000)

cipher = DES3.new(key_24bytes, DES3.MODE_ECB)

关键点

  • 3DES标准密钥长度是24字节(三密钥)或16字节(双密钥)
  • 确保你的密钥来源正确,不要混淆位(bit)和字节(byte)
  • 考虑使用更现代的加密算法如AES

总结建议:检查你的密钥长度单位是否正确,确保使用24字节密钥。


楼主解决这个 32 位的问题了么?我也遇到了相同的问题。。

回到顶部