Pycrypto AES-256-如何加密大字节文本?

时间:2018-08-21 07:25:48

标签: python encryption aes pycrypto

我一直在使用pycrypto和AES-256,并且在文件较大时遇到了一个问题。

对于小字符串,例如“ hello world!”,加密/解密工作正常。

但是我想将加密扩展到任何合理大小的文本文件,但是我一直遇到这个错误:

ValueError: Input strings must be a multiple of 16 in length

我知道这是因为AES-256是一种分组密码,因此文本必须以16字节的倍数表示,如果字节很大,则需要对它们进行分块。

我的问题是,我该怎么做呢?是否有内置的pycrypto方法?我对密码学还很陌生,所以我认为我无法自己编写分块方法。

这是我填充/解压要加密的字符串的方法(来自https://gist.github.com/gustavohenrique/79cc95cc351d975a075f18a5c9f49319):

def pad(self, s):
    return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs)

def unpad(self, s):
    return s[:-ord(s[len(s)-1:])]

这是Cipher类的初始化方式:

def __init__(self, key):
    self.bs = 16
    self.cipher = AES.new(key, AES.MODE_ECB)

加密/解密:

def encrypt(self, raw):
    raw = self._pad(raw)
    encrypted = self.cipher.encrypt(raw)
    encoded = base64.b64encode(encrypted)

    return str(encoded, 'utf-8')

def decrypt(self, raw):
    decoded = base64.b64decode(raw)
    decrypted = self.cipher.decrypt(decoded)

    return str(self._unpad(decrypted), 'utf-8')

0 个答案:

没有答案