基本上我正在将PHP CodeIgniter的加密方法转换为Python,但我在将PHP的mcrypt_create_iv库转换为Python时陷入困境。
先谢谢。
答案 0 :(得分:5)
mcrypt_create_iv()
只是操作系统级伪随机生成器的PHP接口(它甚至不是libmcrypt的一部分,与函数名称的含义相反)。
Python通过os module提供此类接口,您需要的是os.urandom()。
例如,如果您需要将mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)
翻译成Python,则需要编写os.urandom(16)
。
澄清可能的混淆:
您可能在PHP中使用过MCRYPT_DEV_RANDOM
或MCRYPT_RAND
,但实际上没有理由使用其中任何一个而不是MCRYPT_DEV_URANDOM
- 所有可衡量的标准都更好:
MCRYPT_RAND
特别不适合加密目的,换句话说 - 它是不安全。MCRYPT_DEV_RANDOM
可以阻止,直到新的熵数据可用。您不希望在Web应用程序中进行阻止以及/dev/random
比/dev/urandom
更好,因为阻止已经debunked。 MCRYPT_DEV_URANDOM
非阻塞且安全。