Python上Windows的AES实现

2 投票
2 回答
1361 浏览
提问于 2025-04-17 00:13

我在开发一个服务器和客户端应用程序时,遇到了一些加密和解密数据的问题。我使用的是一种AES加密的实现,可以在birth-online.de上下载到这个脚本。

在我的Ubuntu 10.04服务器上,这个实现运行得很好,能够顺利地编码和解码数据。但是,当我在Windows上使用这个脚本时,却遇到了一个异常错误,具体错误信息如下:

>>> aes.encrypt("Test", "Test", 256)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "aes.py", line 148, in encrypt
    key = Cipher(pwBytes, KeyExpansion(pwBytes))
  File "aes.py", line 112, in KeyExpansion
    w = [0] * Nb*(Nr+1)
TypeError: can't multiply sequence by non-int of type 'float'

有没有人知道到底出了什么问题,怎么解决呢?我已经在谷歌上搜索过,但找不到关于这个异常的有用信息。我在我的Windows(x64)测试机上使用的是Python 3.2.1,而我的Ubuntu服务器上运行的是Python 2.6.5。(顺便问一下,版本差异会有影响吗?)

提前谢谢大家!
罗伯特

2 个回答

0

我不太了解整个AES.py,但从你遇到的错误来看,这个包似乎还不支持Python 3。

问题出在Python 3中的“真实除法”。在Python 3中,当你执行 Nk = len(key)/4 时,返回的结果是一个浮点数,而不是整数。要想得到整数结果,你需要加一个额外的斜杠,变成 Nk = len(key) // 4

你可以修复AES.py,或者使用PyCrypto,这个库在性能上要好得多。

2

我建议你试试PyCrypto,我在自己现在的项目中用过,效果很好。你可以在下面了解更多信息:

https://www.dlitz.net/software/pycrypto/

撰写回答