您的位置:首页 > 编程语言 > PHP开发

PHP的AES / Rijndael加密的误导

2014-04-25 23:01 246 查看
在加密解密中经常遇到的一个问题就是用java加密用php解密或者反之用php加密java解密。通常的问题是补零的问题。

最近又遇到一次,是密钥长度的问题,于是搜索找到了这篇文章,讲的很详细。翻译转载希望其他碰到问题的同学更容易搜到。

《PHP的AES / Rijndael加密的误导》

AES是不完全等同于“ Rijndael算法” 。 AES是Rijndael算法的(更严格)的变体。

AES块大小固定为有128位,密钥长度为128, 192,或256位的,而Rijndael算法指定块和密钥大小为32的任意倍数,最少的128位 ,最多的256位。

PHP提供了一个通用的Rijndael算法实现。PHP的mcrypt的API产生了​​无意的误导,因为大多数用户会认为指定MCRYPT_RIJNDAEL_256意味着你会得到256位加密。事实并非如此。MCRYPT_RIJNDAEL_256实际上将算法的块大小设置为256bit(而不是强度)。

关于PHP的加密函数(mcrypt )的详细信息,请参见这篇文章

AES加密标准被定义为使用16字节的块大小Rjindael加密(128位, 192位或256位) 。Chilkat实现了AES加密标准。当你在PHP中指定MCRYPT_RIJNDAEL_256,你*不*是设置加密强度为256位而是将块大小设置为256位。这不是AES加密。要正确地产生在PHP中的256位AES加密,您必须提供一个32字节的加密密钥(它隐式设置加密强度) ,但是块大小必须设置为MCRYPT_RIJNDAEL_128 ( 16字节) 。

http://www.cknotes.com/php-aesrijndael-encryption-confusion/

另:需要代码的可以看这篇

http://my.oschina.net/Jacker/blog/86383
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: