php實現封裝aes加密演算法,與前端互動
阿新 • • 發佈:2018-11-27
class AesSecurity { /** * method 為AES-128-CBC時 * @var string傳入要加密的明文 * 傳入一個16位元組的key * 傳入一個16位元組的初始偏移向量IV */ private static $method = 'AES-128-CBC'; private static $key = 'contentWindowHig'; private static $options = OPENSSL_RAW_DATA; private static $iv = 'contentDocuments'; public static function getKey() { return self::$key; } public function __construct() { // self::$key = md5(self::$key,true); } public static function setMethod($method){ self::$method = $method; } public static function setKey($key){ self::$key = $key; } /** * @param $options 可取值 OPENSSL_ZERO_PADDING OPENSSL_RAW_DATA */ public static function setOptions($options){ self::$options = $options; } public static function _encrypt($input){ $key = substr(md5(self::$key),0,16); $iv = substr(md5(self::$iv),0,16); $data = base64_encode(openssl_encrypt($input,"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv)); return $data; } /** * @param $input * @return bool|string * todo rtrim */ public static function _decrypt($input){ $key = substr(md5(self::$key),0,16); $iv = substr(md5(self::$iv),0,16); $data = openssl_decrypt(base64_decode($input),"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv); return $data; } } #js端 <script type="text/javascript" > var key_base = 'contentWindowHig'; var iv_base = 'contentDocuments' var key_hash = CryptoJS.MD5(key_base).toString(); var iv_hash = CryptoJS.MD5(iv_base).toString(); var key = CryptoJS.enc.Utf8.parse(key_hash.substr(0,16)); var iv = CryptoJS.enc.Utf8.parse(iv_hash.substr(0,16)); function _decrypt(string) { var data = CryptoJS.AES.decrypt(string, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8); return data; } function _encrypt(string) { var data = CryptoJS.AES.encrypt(string, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }).toString(); return data; } var a = _encrypt('msgg'); var b = _decrypt(a); var c= _decrypt('evD5EE8QGSWpuqzhDFaamw==') console.log(a); console.log(b); console.log(c); </script>