What is the difference of AES-128 and AES-512 with php's


What is the difference of AES-128 and AES-512 with php's mcrypt?

我对使用php的mcrypt的AES-128和AES-512的区别感到困惑。区别只是密钥的长度(32和64个字符),或者区别是使用的算法,如MCRYPT_RIJNDAEL_128?如果差异是后者,那么AES-512的算法应该如何?

首先没有AES-512。AES是用密钥长度128、192和256来指定的。接下来,请注意不要将Rijndael与AES混用!AES是基于Rijndael的,但后者也提供了块长度的选择。此块长度在PHP中可以使用常量MCRYPT_RIJNDAEL_128MCRYPT_RIJNDAEL_192MCRYPT_RIJNDAEL_256进行更改。

最后,请避免使用mcrypt。有更好的选择,即openssl:

如果您在2015年编写加密/加密数据的代码,则应该使用openssl_encrypt()和openssl_edecrypt(()。底层库(libmcrypt)自2007年以来一直被放弃,性能远不如OpenSSL(它在现代处理器上利用AES-NI,并且缓存定时安全)。

此外,MCRYPT_RIJNDAEL_256不是AES-256,它是RIJNDAEL分组密码的不同变体。如果要在mcrypt中使用AES-256,则必须使用带有32字节密钥的mcrypt_RIJNDAEL_128。OpenSSL使您使用的模式更加明显(即"aes-128-cbc"与"aes-256-ctr")。

来源和进一步阅读:https://secure.php.net/manual/de/function.mcrypt-encrypt.php#117667

在AES中,-xxx是密钥长度,但我认为PHP支持的三种AES密码是AES-128、AES-192和AES-256