![]() |
1
4
已经有一段时间了,但是几年前我在使用cfb的mcrypt和opensl上遇到了一些类似的问题。最后,我发现mcrypt在cfb模式下使用的默认反馈链大小与openssl不同。也就是说,我认为cfb中的openssl aes128使用128位的块大小和反馈大小,而mcrypt使用128位的块大小和8位的反馈大小。我没有办法证实这一点,只是猜测当时在阅读一些老论坛帖子的基础上。不管这个理论的真实性如何,我不是唯一一个或第一个有这个特殊问题的人。
对我来说,解决办法就是像你一样使用NOFB。根据
PHP mcrypt library reference
至于报告256bit keysizes(32字节)的php,返回当前密码算法密钥大小的函数实际上返回最大密钥大小,文档中没有明确说明。我知道这一点是因为我的小类一直在各种项目中使用,它与OpenSSL以及CBC或NOFB中的任何其他AES库完美结合。如果mcrypt在我的128位(16个字符)密钥中再加上一个128位的空字符串,或者其他什么东西,无论如何技术上都不正确,那么情况就不是这样了。 不是一个很好的答案,但我得到的最好的答案是几年前我对密码学的一次非常业余的探索。 |
![]() |
2
2
查看phpseclib: http://phpseclib.sourceforge.net/ 可以将键大小和块大小设置为所需的任何值。 例如,$aes->setkeylength(128)或$aes->setkeylength(256); |
![]() |
3
1
我有这个问题-几点。默认情况下,php-rijndael模式将反馈循环设置为8bits-to-be-aes需要与iv/key的长度相同。 您可以使用模式“ncfb”而不是“cfb”或mcrypt_模式“cfb”来完成此操作。 有关编写兼容aes-cfb-128的php的完整详细信息,请参阅此安全堆栈交换问题: aes cfb 128 decryption /encryption problem between Erlang and PHP . 短的是(来自汤姆·利克):
|