使用AES-256和PKCS7填充进行加密

时间:2017-04-04 05:43:22

标签: python encryption padding pycrypto

我想使用python加密一些数据,并且已经遇到过pycrypto作为一种可能的工具。为了加密数据,我需要:

  1. 输入密码字符串
  2. SHA-256字符串,为AES-256提供密钥
  3. 将敏感数据表示为9位数字符串(ascii),如果存在,则前导ascii 0(数据将始终采用此格式)。
  4. 使用AES-256,NO SALT加密数据字符串,使用RFC2315中的PKCS7填充,在ecb模式下。
  5. 将密文表示为Base64(RFC 4648),需要24个字符
  6. 使用pycrypto,步骤1-3非常简单。 4给我一点麻烦。我不确定PKCS7填充是什么,我不确定如何确保加密不使用SALT。我希望有人能指出我正确的方向:第4步。

1 个答案:

答案 0 :(得分:0)

PyCrypto没有内置的填充功能。但是实现起来很容易。 此处介绍了PKCS#7填充。

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]]

PS,

  

ECB加密模式不是加密安全的。请使用更高的模式,例如CBC,OFB或GCM。

     

GCM或Galois / Counter模式同时提供数据机密性和身份验证(即使是相关数据,也无需加密)。

     

这是迄今为止最安全的模式,除非您两次使用相同的随机数。