【发布时间】:2015-12-02 23:06:02
【问题描述】:
我正在寻找一种非常快速的方法来加密和解密短文本 sn-ps。在我的用例中,安全性是次要的。具有恒定 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?),或者是否有更快的填充功能,更快的十六进制转换输出方式?
【问题讨论】:
-
为什么需要这么快?你能改成 C 或 Java 这样的编译语言吗?
-
它必须是 Python。刚刚意识到,通过使用 binascii(仅 ASCII 即可),我可以将函数加速约 7%。就是这样。
-
pycrypto 在 C 中使用原生的 AES 实现并支持 AES-NI。那里没有什么比这更快的了。你想要多快?您可以寻找 TEA 的 C 实现的 python 包装器。
-
+1 用于茶。 XXTEA 正是我喜欢使用的,但是,这引导我到这里:stackoverflow.com/questions/34053117/…
标签: python encryption aes pycrypto