JS加解密
JS加解密
本地引入<br><br>CryptoJS.min.js(网盘Tool下) <!--或者CDN--> |
1 | <em id= "__mceDel" ><script src= "https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js" ></script></em> |
// ****************************// JS 对称加密算法let pwd = CryptoJS.enc.Utf8.parse("666666"); // 解析明文let key = CryptoJS.enc.Utf8.parse("abcd1234"); // 解析秘钥let iv = CryptoJS.enc.Utf8.parse("666666"); // 解析偏移向量, CBC模式下用到, ECB模式不用// JS AES CBC模式 加密let ciphertext = CryptoJS.AES.encrypt(pwd, key, { mode: CryptoJS.mode.CBC, // 加密模式 padding: CryptoJS.pad.Pkcs7, // 填充方式 iv: iv // 偏移向量}).toString(); console.log(ciphertext)// ciphertext结果为:p0h2lUuOAh4tmEN7FTLq8w==, base64的形式// JS AES CBC模式 解密, 必须为base64格式才能解密,如果为16进制,需要先转为base64let key = CryptoJS.enc.Utf8.parse("abcd1234"); // 解析秘钥let iv = CryptoJS.enc.Utf8.parse("666666"); // 解析偏移向量, CBC模式下用到, ECB模式不用let ciphertexts = CryptoJS.AES.decrypt("p0h2lUuOAh4tmEN7FTLq8w==", key, { mode: CryptoJS.mode.CBC, // 加密模式 padding: CryptoJS.pad.Pkcs7, // 填充方式 iv: iv // 偏移向量}).toString(CryptoJS.enc.Utf8); console.log(ciphertexts)// ****************************
// ****************************// JS DES ECB模式 加密function encryptByDES(message, key){ let keyHex = CryptoJS.enc.Utf8.parse(key); let encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.ciphertext.toString(); }// JS DES ECB模式 解密function decryptByDES(ciphertext, key){ let keyHex = CryptoJS.enc.Utf8.parse(key); let decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse(ciphertext) }, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); let result_value = decrypted.toString(CryptoJS.enc.Utf8); return result_value; } let message = '18616563858';//需要加密的数据let key = 'pptv';//加密key// JS DES 加密desMessage = encryptByDES(message, key); console.log(desMessage);// JS DES 解密message = decryptByDES(desMessage,key) console.log(message);// ****************************
// ****************************// JS ECB模式 加密var key = "abcd1234"let ckey = CryptoJS.enc.Utf8.parse(key) let encrypted = CryptoJS.AES.encrypt("TFT2020@ASX", ckey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); let hexstr = encrypted.ciphertext.toString() console.log(hexstr); // 返回hex格式的密文// PHP 解密$mes = hex2bin("4b5bc2f487e7b081d1188beb4f0deb38"); $res = openssl_decrypt($mes, 'AES-128-ECB', "1234567890123456", OPENSSL_RAW_DATA); echo $res; //输出admin // ****************************
// ****************************var key = "abcd1234"let string = "TFT2020SAC%&#"let ivstr = "123456" let KeyHex = CryptoJS.enc.Utf8.parse(key) let encrypted = CryptoJS.DES.encrypt(string, KeyHex, { mode: CryptoJS.mode.CBC, // ecb模式不需要偏移量 padding: CryptoJS.pad.Pkcs7, iv: CryptoJS.enc.Utf8.parse(ivstr) }); let hexstr = encrypted.ciphertext.toString() // 返回hex格式的密文console.log(hexstr)// PHP解密$mes = hex2bin(hexstr); $res = openssl_decrypt($mes, 'DES-CBC', "abcd1234", OPENSSL_RAW_DATA, "123456"); echo $res; //输出TFT2020SAC%&#// ****************************
// ****************************// PHP AES加密$key = '1234567890123456'; //密钥,前后端双方事先约定好$iv = '12345678'; //偏移量,前后端双方事先约定好,ecb模式不需要此参数$message = "TFT202@S$%A"; $aes = openssl_encrypt($message, 'AES-128-ECB', $key, OPENSSL_RAW_DATA); $rs = bin2hex($aes); var_dump($rs); // JS AES解密let ckey = CryptoJS.enc.Utf8.parse("1234567890123456"); let ciphertext = CryptoJS.enc.Hex.parse("b9e1cab6e983ca5f0cc2f85e3df8de3b"); let srcs = CryptoJS.enc.Base64.stringify(ciphertext); let decrypt = CryptoJS.AES.decrypt(srcs, ckey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); let decrypted = decrypt.toString(CryptoJS.enc.Utf8); console.log(decrypted.toString(CryptoJS.enc.Utf8));// ****************************
// ****************************// PHP DES加密$des = openssl_encrypt($message, 'DES-CBC', $key, OPENSSL_RAW_DATA, $iv); $rs = bin2hex($des); var_dump($rs); // JS DES解密let keyHex = CryptoJS.enc.Utf8.parse("1234567890123456") let decrypted = CryptoJS.DES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse("7e001ef45efe287715a7f826fd9c9d46") }, keyHex, { iv: CryptoJS.enc.Utf8.parse("12345678"), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 }); console.log(decrypted.toString(CryptoJS.enc.Utf8))// ****************************