PHP openssl_decrypt 加密解密,js的CryptoJS数据加密解密
一、php方面 1.需要开启openssl扩展 2.注:php 的 mcrypt_ 函数簇在 7.1.0 版本中开始 deprecated,并在 7.2.0 版本中彻底废弃。其实在 2015 就已经开始建议大家使用 openssl_encrypt/openssl_decrypt 来代替 mcrypt_encrypt/mcrypt_decrypt,缓冲了 N 久,这一天终于在 7.2.0 版本上到来了。 openssl_decrypt 的 OPENSSL_ZERO_PADDING默认会补零到16位 aes-128-cbc: 表示16位的 method 长度的问题,密码学方式我们用的最多的有两种,AES-128-CBC 与 AES-256-CBC 字符串的长度问题 1 bit 位 = 1 二进制数据 1 byte 字节 = 8 bit 1 字母 = 1 byte = 8 bit 128位/8=16字节=16字符 192位/8=24字节=24字符 256位/8=32字节=32字符 也就是说KEY 的长度是根据AES-128-CBC 与 AES-256-CBC 变换的。使用 AES-128-CBC 时,key的长度应该为16位,使用 AES-256-CBC时,key的长度应该为32位。 <?php // 需要加密的字符串 $plaintext = "hello"; // 加密密钥(必须是16、24或32个字符长,对应AES-128、AES-192、AES-256) $key = "examplekey123456"; // 请确保密钥的安全性 // 初始化向量(IV),必须是16个字符长 $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc')); // 加密字符串 $encrypted = openssl_encrypt($plaintext, 'aes-128-cbc', $key, 0, $iv); // 如果需要,可以将IV和密文一起存储或传输(通常使用base64编码以便于存储和传输) $encrypted_with_iv = base64_encode($iv.$encrypted); echo "加密后的字符串(包含IV): " . $encrypted_with_iv . ""; // 将加密字符串(包含IV)解码为原始二进制数据 $decoded = base64_decode($encrypted_with_iv); // 提取IV(前16个字符)和密文(剩余部分) $iv = substr($decoded, 0, 16); $encrypted = substr($decoded, 16); // 解密字符串 $decrypted = openssl_decrypt($encrypted, 'aes-128-cbc', $key, 0, $iv); echo "解密后的字符串: " . $decrypted; ?> 二、js方面 cryptojs:下载地址 https://code.google.com/archive/p/crypto-js/downloads cryptojs:文档说明 CryptoJS - CryptoJS cryptojs:在线调试工具 在线加密解密 <!-- 加密js--> <script src="__STATIC__/common/js/crypto/rollups/aes.js"></script> <script src="__STATIC__/common/js/crypto/components/pad-zeropadding.js"></script> /** * 加密 */ function doEncrypt(data) { if (data == '' || data == undefined) { return data; } let key = CryptoJS.enc.Latin1.parse('F79JF2tNdHLW4bid'); let iv = CryptoJS.enc.Latin1.parse('bk4h1mv84RCOdyn2'); //加密 return CryptoJS.AES.encrypt(data, key, {iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding}); } 转自:https://blog.csdn.net/qq_25275355/article/details/116918996
- javascript
- admin
- 7小时前
- 3 热度
- 0评论