啥也不说,直接看代码
<?php/*** 基于 AES-128-CBC PKCS7填充模式 的 加密解密类* @package aes*/class MyCryptForAes128Cbc{private static $cipher = 'AES-128-CBC';private static $key = 'AES128CBC--PKCS7';private static $iv = 'AES128CBC--PKCS7';private static $options= OPENSSL_RAW_DATA;/*** 加密* @param $string* @return string*/public static function encrypt($string){try {return bin2hex(base64_encode(openssl_encrypt($string, self::$cipher, self::$key, self::$options, self::$iv)));}catch (ErrorException $errorException){return '';}}/*** 解密* @param $string* @return string*/public static function decrypt($string){try {$str = openssl_decrypt(base64_decode(pack('H*',$string)), self::$cipher, self::$key, self::$options, self::$iv);if ($str === false){//解密失败返回空$str = '';}if(self::encrypt($str) != $string){//经测试,通过上面加密函数加密后,在密文后面添加一些数据后也能解密出来//所以,解密出来的内容再进行加密,加密出的密文与参数的密文进行比较,不一致则返回空return '';}return $str;}catch (ErrorException $errorException){return '';}}}$d = '1234567890***...';echo $p = MyCryptForAes128Cbc::encrypt($d);echo PHP_EOL;echo $a = MyCryptForAes128Cbc::decrypt($p);
测试一下:
php index.php
5943424f6a644e4a774b644761496a4b6f7534337142494f55527a324d7478392f5530634f6756414548383d
1234567890*…
和Golang的互相转换可以参考:这里
