php7.2中mcrypt转openssl的方法详解
在php7.2中mcrypt已经被废弃了。
用openssl代替它。
例如
public function desEncrypt($str,$key) {
$iv = $key;
$size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
$str = $this->_pkcs5_pad ( $str, $size );
return strtoupper( bin2hex( mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_CBC, $iv ) ) );
}
public function desDecrypt($str,$key) {
$iv = $key;
$strBin = $this->_hex2bin( strtolower( $str ) );
$str = mcrypt_decrypt( MCRYPT_DES, $key, $strBin, MCRYPT_MODE_CBC, $iv );
$str = $this->_pkcs5_unpad( $str );
return $str;
}
private function _pkcs5_pad($text,$block=8){
$pad = $block - (strlen($text) % $block);
return $text . str_repeat(chr($pad), $pad);
}
private function _pkcs5_unpad($text) {
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return $text;
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return $text;
return substr($text, 0, -1 * $pad);
}
替换后:
//要改的加密
public function desEncrypt($str,$key) {
// $b = openssl_get_cipher_methods();
// echo '<pre>';
// print_r($b);
$iv = $key;
// $size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
// var_dump($size);exit;
// $str = $this->_pkcs5_pad ( $str, $size );
// return strtoupper( bin2hex( mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_CBC, $iv ) ) );
$data = openssl_encrypt($str,"DES-CBC",$key,OPENSSL_RAW_DATA,$iv);
$data = strtolower(bin2hex($data));
return $data;
}
//要改的解密
public function desDecrypt($str,$key) {
$iv = $key;
// $strBin = $this->_hex2bin( strtolower( $str ) );
// $str = mcrypt_decrypt( MCRYPT_DES, $key, $strBin, MCRYPT_MODE_CBC, $iv );
// $str = $this->_pkcs5_unpad( $str );
// return $str;
return openssl_decrypt (hex2bin($str), 'DES-CBC', $key, OPENSSL_RAW_DATA,$iv);
}
这些网上都有,在作者使用的过程中因为使用的是MCRYPT_DES,无法得知openssl对应的是那种加密方式,所以通过手册找到了openssl_get_cipher_methods();
该方法可以找出openssl支持的所有方法,进行替换即可。
echo '<pre>';
$a = openssl_get_cipher_methods();
print_r($a);
Array
(
[0] => AES-128-CBC
[1] => AES-128-CFB
[2] => AES-128-CFB1
[3] => AES-128-CFB8
[4] => AES-128-CTR
[5] => AES-128-ECB
[6] => AES-128-OFB
[7] => AES-128-XTS
[8] => AES-192-CBC
[9] => AES-192-CFB
[10] => AES-192-CFB1
[11] => AES-192-CFB8
[12] => AES-192-CTR
[13] => AES-192-ECB
[14] => AES-192-OFB
[15] => AES-256-CBC
[16] => AES-256-CFB
[17] => AES-256-CFB1
[18] => AES-256-CFB8
[19] => AES-256-CTR
[20] => AES-256-ECB
[21] => AES-256-OFB
[22] => AES-256-XTS
[23] => BF-CBC
[24] => BF-CFB
[25] => BF-ECB
[26] => BF-OFB
[27] => CAMELLIA-128-CBC
[28] => CAMELLIA-128-CFB
[29] => CAMELLIA-128-CFB1
[30] => CAMELLIA-128-CFB8
[31] => CAMELLIA-128-ECB
[32] => CAMELLIA-128-OFB
[33] => CAMELLIA-192-CBC
[34] => CAMELLIA-192-CFB
[35] => CAMELLIA-192-CFB1
[36] => CAMELLIA-192-CFB8
[37] => CAMELLIA-192-ECB
[38] => CAMELLIA-192-OFB
[39] => CAMELLIA-256-CBC
[40] => CAMELLIA-256-CFB
[41] => CAMELLIA-256-CFB1
[42] => CAMELLIA-256-CFB8
[43] => CAMELLIA-256-ECB
[44] => CAMELLIA-256-OFB
[45] => CAST5-CBC
[46] => CAST5-CFB
[47] => CAST5-ECB
[48] => CAST5-OFB
[49] => DES-CBC
[50] => DES-CFB
[51] => DES-CFB1
[52] => DES-CFB8
[53] => DES-ECB
[54] => DES-EDE
[55] => DES-EDE-CBC
[56] => DES-EDE-CFB
[57] => DES-EDE-OFB
[58] => DES-EDE3
[59] => DES-EDE3-CBC
[60] => DES-EDE3-CFB
[61] => DES-EDE3-CFB1
[62] => DES-EDE3-CFB8
[63] => DES-EDE3-OFB
[64] => DES-OFB
[65] => DESX-CBC
[66] => IDEA-CBC
[67] => IDEA-CFB
[68] => IDEA-ECB
[69] => IDEA-OFB
[70] => RC2-40-CBC
[71] => RC2-64-CBC
[72] => RC2-CBC
[73] => RC2-CFB
[74] => RC2-ECB
[75] => RC2-OFB
[76] => RC4
[77] => RC4-40
[78] => RC4-HMAC-MD5
[79] => SEED-CBC
[80] => SEED-CFB
[81] => SEED-ECB
[82] => SEED-OFB
[83] => aes-128-cbc
[84] => aes-128-cfb
[85] => aes-128-cfb1
[86] => aes-128-cfb8
[87] => aes-128-ctr
[88] => aes-128-ecb
[89] => aes-128-gcm
[90] => aes-128-ofb
[91] => aes-128-xts
[92] => aes-192-cbc
[93] => aes-192-cfb
[94] => aes-192-cfb1
[95] => aes-192-cfb8
[96] => aes-192-ctr
[97] => aes-192-ecb
[98] => aes-192-gcm
[99] => aes-192-ofb
[100] => aes-256-cbc
[101] => aes-256-cfb
[102] => aes-256-cfb1
[103] => aes-256-cfb8
[104] => aes-256-ctr
[105] => aes-256-ecb
[106] => aes-256-gcm
[107] => aes-256-ofb
[108] => aes-256-xts
[109] => bf-cbc
[110] => bf-cfb
[111] => bf-ecb
[112] => bf-ofb
[113] => camellia-128-cbc
[114] => camellia-128-cfb
[115] => camellia-128-cfb1
[116] => camellia-128-cfb8
[117] => camellia-128-ecb
[118] => camellia-128-ofb
[119] => camellia-192-cbc
[120] => camellia-192-cfb
[121] => camellia-192-cfb1
[122] => camellia-192-cfb8
[123] => camellia-192-ecb
[124] => camellia-192-ofb
[125] => camellia-256-cbc
[126] => camellia-256-cfb
[127] => camellia-256-cfb1
[128] => camellia-256-cfb8
[129] => camellia-256-ecb
[130] => camellia-256-ofb
[131] => cast5-cbc
[132] => cast5-cfb
[133] => cast5-ecb
[134] => cast5-ofb
[135] => des-cbc
[136] => des-cfb
[137] => des-cfb1
[138] => des-cfb8
[139] => des-ecb
[140] => des-ede
[141] => des-ede-cbc
[142] => des-ede-cfb
[143] => des-ede-ofb
[144] => des-ede3
[145] => des-ede3-cbc
[146] => des-ede3-cfb
[147] => des-ede3-cfb1
[148] => des-ede3-cfb8
[149] => des-ede3-ofb
[150] => des-ofb
[151] => desx-cbc
[152] => id-aes128-GCM
[153] => id-aes192-GCM
[154] => id-aes256-GCM
[155] => idea-cbc
[156] => idea-cfb
[157] => idea-ecb
[158] => idea-ofb
[159] => rc2-40-cbc
[160] => rc2-64-cbc
[161] => rc2-cbc
[162] => rc2-cfb
[163] => rc2-ecb
[164] => rc2-ofb
[165] => rc4
[166] => rc4-40
[167] => rc4-hmac-md5
[168] => seed-cbc
[169] => seed-cfb
[170] => seed-ecb
[171] => seed-ofb
)
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »