PHP openssl_decrypt 加密解密,js的CryptoJS数据加密解密
- javascript
- 15小时前
- 9热度
- 0评论
一、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