PHP版本从7.2开始不再支持mcrypt扩展,所以我们需要使用OpenSSl对其进行替换。本文仅列出部分算法的替换示例,所以不在本文出现的算法或模式需要自行尝试,顺水推舟。
本文替换案例:
- MCRYPT_RIJNDAEL_128 | MCRYPT_MODE_ECB => AES-128-ECB
- MCRYPT_DES | MCRYPT_MODE_CBC => DES-CBC
- MCRYPT_RIJNDAEL_128 | MCRYPT_MODE_CBC => AES-128-CBC
- MCRYPT_XTEA | MCRYPT_MODE_CBC
在使用 MCRYPT_RIJNDAEL_128 的地方,如果秘钥长度分别为16、24、32,则加密算法用 AES-128-ECB、AES-192-ECB、AES-256-ECB,BlockSize为16、24、32。
首先列出需要用到的数据填充方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| function ZeroPadding($str, $block = 16) { $pad = $block - (strlen($str) % $block); if($pad == $block) return $str; return $str.str_repeat(chr(0),$pad); } function ZeroUnPadding($str) { return rtrim($str, "\0"); } function PKCS7Padding($str, $block_size) { $padding_char = $block_size - (strlen($str) % $block_size); $padding_str = str_repeat(chr($padding_char),$padding_char); return $str.$padding_str; } function PKCS7UnPadding($str) { $char=substr($str,-1,1); $num=ord($char); if($num>0 && $num <= strlen($str)) { $str = substr($str, 0, -1 * $num); } return $str; }
|
阅读剩下更多