如何使Python加密AES更快

如何使Python加密AES更快,python,encryption,aes,pycrypto,Python,Encryption,Aes,Pycrypto,我正在寻找一种非常快速的加密和解密短文本片段的方法。在我的用例中,安全性是次要的。使用恒定IV进行光加密是可以的。我目前正在这样做: BS = 16 pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s : s[:-ord(s[len(s)-1:])] import base64 from Crypto.Cipher import AES iv = '0123456789012345'

我正在寻找一种非常快速的加密和解密短文本片段的方法。在我的用例中,安全性是次要的。使用恒定IV进行光加密是可以的。我目前正在这样做:

BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s : s[:-ord(s[len(s)-1:])]

import base64
from Crypto.Cipher import AES

iv = '0123456789012345'
def encrypt(raw, key):
    raw = pad(raw)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return base64.b64encode( cipher.encrypt( raw ) )

def decrypt(enc, key):
    enc = base64.b64decode(enc)
    cipher = AES.new(key, AES.MODE_CBC, iv)
    return unpad(cipher.decrypt( enc ))

enc_text = encrypt('Hello World!','xyz1234567890abc')
print decrypt(enc_text, 'xyz1234567890abc')
我怎样才能使它更快?可能通过使用另一种AES模式(mode_CBC?),或者是否有更快的填充函数、更快的十六进制转换输出方式?

计数器模式(
AES.mode_CTR
)对于多块消息将更快,因为它可以并行进行加密和解密
CBC
在加密时是串行的,因为在加密之前,每个分组密码操作的结果输出都作为输入,与下一个块的明文一起馈送到
XOR
。由于
CTR
通过使用密钥加密每个(顺序)计数器值来生成密钥流,因此它不依赖于任何先前块操作的输出,并且可以并行执行任务

此外,由于
CTR
作为流密码进行操作,因此不需要进行消息填充,因此您可以节省进出操作的时间


注意:不要重复使用计数器。您提到保密性是第二个问题,但在CBC模式下重新使用IVs是“不好的”,而在CTR模式下重新使用计数器是世界末日不好的。只要使用a,您就可以了。(请参阅或以获取有关原因的示例)。

试试为什么需要这么快?你能换成C或Java这样的编译语言吗?它必须是Python。刚刚意识到,通过使用binascii(仅限ASCII),我可以将函数的速度提高约7%。pycrypto在C中使用AES的本机实现,并支持AES-NI。没有比这更快的办法了。你要多快?您可以寻找TEA的C实现的python包装器。XXTEA正是我想要使用的,然而,这让我想到: