前端JavaScript AES解密 AES加密 ECB模式

项目里使用过md5、base64,使用AES的安全系数会高一些。

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法,微信小程序加密传输就是用这个加密算法的。由于h5项目需要从安卓app和ios拿到AES加密数据进行处理,所以根据安卓给的代码加上万能的百度快速得看了一下AES。

对称加密算法也就是加密和解密用相同的一些参数:

  • 密钥key
  • 偏移量十六进制iv
  • 编码Base64还是Hex
  • 模式mode 选择ECB还是CBC...
  • 填充Pkcs5P还是Pkcs7P...
  • 字符集是utf8还是gbk...

以上内容,不管是从后端拿文进行解码,还是后端从前端拿文解码,都需要保持以上参数一致。

第一次接触AES的人可能有点迷糊,盲目抄代码是没用的,要先了解AES究竟需要什么参数进行转换的。盲目到处搜索和抄代码只会浪费时间,不如去快速了解一下这个东西究竟是什么

可能以上的内容让你有点还是搞不懂,那么看看这个AES在线转码可能就能理解一些了。

SSL在线工具-AES在线加解密-AES encryption-SSLeye官网

这次我拿ECB模式、pks5、utf8、base64、密码为:~!@#$%^&*()_+123,进行加密,如图:

加密出来的密文是:FVRywVYCoT/SNpJRlhGypQ==

看看解密出来的是什么

引入crypto-js 

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js"></script>

js代码解密得出 hello

// 解密事件---
function decipherinHandler(word) {
    var key = CryptoJS.enc.Utf8.parse("~!@#$%^&*()_+123");//密码 utf8
    var decrypt = CryptoJS.AES.decrypt(word, key, {
        mode: CryptoJS.mode.ECB,//模式
        padding: CryptoJS.pad.Pkcs7
    });
    console.log('decipherin:',CryptoJS.enc.Utf8.stringify(decrypt).toString())
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
decipherinHandler('FVRywVYCoT/SNpJRlhGypQ==');//decipherin: hello

js代码字符串 hello 进行AES加密 得出:FVRywVYCoT/SNpJRlhGypQ==

// 加密事件
function encryptionHandler(word) {
    var key = CryptoJS.enc.Utf8.parse("~!@#$%^&*()_+123");
    var srcs = CryptoJS.enc.Utf8.parse(word);
    var encrypted = CryptoJS.AES.encrypt(srcs, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    console.log('encryption:',encrypted.toString());
    return encrypted.toString();
}
encryptionHandler('hello')//encryption:FVRywVYCoT/SNpJRlhGypQ==

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端使用AES加密是为了保护数据的安全性,防止数据被篡改或者被恶意攻击。后端Java可以使用相应的解密方法来解密AES加密的数据,下面是代码示例: 前端加密代码: ```javascript function aesEncrypt(data, key) { var aesKey = CryptoJS.enc.Utf8.parse(key); var encrypted = CryptoJS.AES.encrypt(data, aesKey, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return encrypted.toString(); } var data = "Hello World!"; var key = "1234567890123456"; var encryptedData = aesEncrypt(data, key); console.log(encryptedData); // 输出: U2FsdGVkX1+0+H3LX/3jvK3b9b0O2Z9M1QfzMN5eK4= ``` 后端解密代码: ```java import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; public class AesUtil { // AES解密方法 public static String aesDecrypt(String encryptedData, String key) { try { SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES"); Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedBytes = cipher.doFinal(Base64.decodeBase64(encryptedData)); return new String(decryptedBytes); } catch (Exception ex) { throw new RuntimeException(ex); } } public static void main(String[] args) { // 假设前端使用AES加密的数据为:U2FsdGVkX1+0+H3LX/3jvK3b9b0O2Z9M1QfzMN5eK4= String encryptedData = "U2FsdGVkX1+0+H3LX/3jvK3b9b0O2Z9M1QfzMN5eK4="; String key = "1234567890123456"; // 解密数据 String decryptedData = aesDecrypt(encryptedData, key); System.out.println(decryptedData); // 输出: Hello World! } } ``` 以上代码假设前端使用AES加密数据,后端使用解密方法对数据进行解密,然后返回解密后的数据给前端。在实际应用中,可以根据具体需要进行调整。需要注意的是,前后端使用的秘钥必须相同,否则无法解密

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值