用AES-256和PKCS7填充加密

2024-04-24 23:31:24 发布

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

我想使用python来加密一些数据,并将pycrypto作为一种可能的工具。为了加密数据,我需要:

  1. 输入密码短语字符串
  2. SHA-256字符串,为AES-256提供密钥
  3. 将敏感数据表示为9位字符(ascii)的字符串,如果存在,则使用前导ascii 0(数据将始终采用此格式)。
  4. 在ecb模式下,使用AES-256加密数据字符串,无盐,使用来自RFC2315的PKCS7填充。
  5. 将密文表示为Base64(RFC 4648),需要24个字符

使用pycrypto,步骤1-3相当简单。4给了我一点麻烦。我不知道什么是PKCS7填充,也不知道如何确保加密不使用SALT。我希望有人能给我指出正确的方向:第四步。


Tags: 工具数据字符串密码格式ascii密钥字符
1条回答
网友
1楼 · 发布于 2024-04-24 23:31:24

PyCrypto没有用于填充的内置功能。但是它很容易实现。注意:当输入已经是正确的大小时,PKCS7 Padding将添加一个额外的字节块,这个函数也会这样做。 ^{}此处解释填充。

def pad(m):
    return m+chr(16-len(m)%16)*(16-len(m)%16)

KEY = sha256(passphrase).digest()  #returns 256 bit key
cipher = AES.new(KEY,AES.MODE_ECB) #creates a AES-256 instance using ECB mode
ciphertext = cipher.encrypt(pad(data)).encode('base64')

希望这就是你想要的。 在解密过程中,unpad函数可能会派上用场。

def unpad(ct):
    return ct[:-ct[-1]]

在Python 3中,unpad函数可能需要强制转换(取决于用法),如下所示:

def unpad(ct):
    return ct[:-ord(ct[-1])]

p.S

ECB mode of encryption is not cryptographic secure. Please use higher modes such as CBC, OFB or GCM.

GCM or Galois/Counter Mode provides both data confidentiality as well as authentication (Even for associated data, which need not be encrypted).

It is the most secure mode yet unless you use the same nonce twice

相关问题 更多 >