红包
◆ [2024-12-21 星期六 22:14] ◆
您来自:18.118.164.105,欢迎您访问風雲工作室。
◆
收藏本站
◆ | ◆
设为首页
◆
联系站长(腾讯QQ)
5029111 [風雲]
〓
站长当前离线
〓
首 页
论坛交流
游戏频道
无忧脚本
旧版论坛
云服务器
聊 天 室
自助链接
来访记录
访客留言
搜索提供
位置:
風雲工作室
-
论坛交流
-
技术专栏
-
脚本中心
- 基于前端Javascript 的 AES-GCM 加密解密
返回
主题:基于前端Javascript 的 AES-GCM 加密解密
風雲
★☆☆☆☆☆☆☆☆☆
积分:58
发帖:62
登录:2024/3/26
注册:2006/9/17
(1楼)
基于前端Javascript 的 AES-GCM 加密解密
IE 11 下没成功。edge 下本地测试没问题,在线调试可能需要 https 环境。
<script type="text/javascript"> var cry = self.crypto || self.msCrypto; setTimeout(function() { var makeKey = cry.subtle.generateKey({ name: "AES-GCM", length: 256 }, true, [ "encrypt", "decrypt" ]); var iv = cry.getRandomValues(new Uint8Array(12)); if("then" in makeKey) return makeKey.then(function(res) { encrypt("中华人民共和国", res, iv, function(str) { alert("加密结果:" + str); decrypt(str, res, iv, function(str) { alert("解密结果:" + str); }); }); console.log("Key is: ", res); }); makeKey.oncomplete = function() { encrypt("中华人民共和国", this.result, iv); }; }, 0); function encrypt(str, key, iv, func) { var bin = encode(str); // console.log(new Blob([bin]), key, iv); var rs = cry.subtle.encrypt({ name: "AES-GCM", iv: iv }, key, bin); if("then" in rs) return rs.then(function(res) { toBase64(new Blob([ res ]), function(res) { func(res); }); }); rs.oncomplete = function() { console.log(this); }; rs.onerror = function() { console.log(this); }; } function decrypt(str, key, iv, func) { var bstr = atob(str); var bin = new Uint8Array(bstr.length); for(var i = 0; i < bstr.length; i++) bin[i] = bstr.charCodeAt(i); cry.subtle.decrypt({ name: "AES-GCM", iv: iv }, key, bin).then(res => func(decode(new Uint8Array(res))) ); } function toBase64(bytes, func) { var fr = new FileReader; fr.onloadend = function() { func(fr.result.split(",")[1]); }; fr.readAsDataURL(new Blob([ bytes ])); } function encode(str) { str = encodeURIComponent(str); str = str.replace(/%\w{2}/g, function($1) { return unescape($1); }); var arr = new Array; for(var i = 0; i < str.length; i++) arr.push(str.charCodeAt(i)); return new Uint8Array(arr); } function decode(bytes) { var arr = new Array; for(var i = 0; i < bytes.length; i++) { var str = bytes[i].toString(16); if(str.length < 2) str = "0" + str; arr[i] = "%" + str; } return decodeURIComponent(arr.join("")); } </script>
[您可以先修改代码再运行]
时间:
2021年4月12日 10:45:36
IP:
已记录
引用
回复
© Copyright 2006-2024,
風雲工作室
All rights reserved.
【
湘ICP备05009306号
】
QQ登录
操作 1 个库,连接 2 次,执行 7 次,耗时 109 毫秒。