加密解密及其javascript实现
前端提交数据到后台,如果不适用https协议,则提交的数据就有被第三者窃取的可能。前端使用js来编码数据主要分为以下三种:
1、摘要算法
2、对称加密
3、非对称加密
下面分别介绍三种算法中对应的一个实例,并给出js实现例子。
MD5(摘要算法)
百度百科
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等
javascript实现
实现官网
http://pajhome.org.uk/crypt/md5/index.html
网站介绍用途:
1、保护明文密码,将密码经过MD5函数换算为 128bit的 散列值。
2、生成密码,用户使用统一的密码,同时添加上域名,计算出MD5散列值,用于各个网站的密码。
3、生成自解密文档,生成的文档,可以嵌入html网页,任何用户都可以访问此网页, 但是只有用户输入正确的密码才能看到网页原貌。http://pajhome.org.uk/crypt/md5/uses.html#sdp
下载网站
http://pajhome.org.uk/crypt/md5/scripts.html
下载链接
http://pajhome.org.uk/crypt/md5/jshash-2.2.zip
此库同时实现的散列摘要算法
MD5 | Source | Specification |
---|---|---|
RIPEMD-160 | Source | Specification |
SHA-1 | Source | Specification |
SHA-256 | Source | Specification |
SHA-512 | Source | Specification |
HMAC |
实验code
<html> <head> <script src="md5.js" type=text/javascript></script> </head> <body> <label>"I love you" MD5 value = </label><span id="md5control"></span> <script type=text/javascript> hash = hex_md5("I love you"); //产生的hash变量就是"input string"的md5值,用在表单提交时 document.getElementById("md5control").innerText = hash; </script> </body> </html>
网页输出:
"I love you" MD5 value = e4f58a805a6e1fd0f6bef58c86f9ceb3
AES(对称加密)
加密强度高于DES的对称加密方法,使用同一个密钥实现, 加密和解密。
实现官网:
http://point-at-infinity.org/jsaes/
网站例子和解释:
http://people.eku.edu/styere/Encrypt/JS-AES.html
AES was designed to be efficient in both hardware and software, and supports a block length of 128 bits and key lengths of 128, 192, and 256 bits
测试代码:
<html> <head> <script src="jsaes.js" type=text/javascript></script> </head> <body> <label>"00 11 22 .. EE FF" AES value = </label><span id="AEScontrol"></span> <br/> <label>decrypted value = </label><span id="decryptedValue"></span> <script type=text/javascript> //The following code example enciphers the plaintext block '00 11 22 .. EE FF' with the 256 bit key '00 01 02 .. 1E 1F'. AES_Init();var block = new Array(16);for(var i = 0; i < 16; i++)block[i] = 0x11 * i;//生成128位密钥var key = new Array(32);for(var i = 0; i < 32; i++)key[i] = i;AES_ExpandKey(key);AES_Encrypt(block, key);document.getElementById("AEScontrol").innerText = block;AES_Done();//下面对加密后的block进行解密 AES_Init();//生成128位密钥var key = new Array(32);for(var i = 0; i < 32; i++)key[i] = i;AES_ExpandKey(key);AES_Decrypt(block, key);document.getElementById("decryptedValue").innerText = block;AES_Done();</script> </body> </html>
网页输出:
"00 11 22 .. EE FF" AES value = 142,162,183,202,81,103,69,191,234,252,73,144,75,73,96,137
decrypted value = 0,17,34,51,68,85,102,119,136,153,170,187,204,221,238,255
RSA(非对称加密)
介绍
http://pajhome.org.uk/crypt/rsa/index.html
非对称加密,采用公钥进行加密,私钥进行解密。
实现网站与使用介绍
https://github.com/travist/jsencrypt
下载:
http://travistidwell.com/jsencrypt/
在线演示demo:
http://travistidwell.com/jsencrypt/example.html
实验:
私钥
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ
WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR
aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB
AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv
xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH
m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd
8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF
z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5
rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM
V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe
aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil
psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz
uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876
-----END RSA PRIVATE KEY-----
公钥
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN
FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76
xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4
gwQco1KRMDSmXSMkDwIDAQAB
-----END PUBLIC KEY-----
精简代码:
<!DOCTYPE html> <html> <head><title>JSEncrypt Example</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script src="jquery.js"></script><script type="text/javascript" src="bin/jsencrypt.js"></script> </head> <body><div class="container"><label>"I love you" RSA PUBLIC ENCRYPTED value = </label><br/> <textarea id="RSAcontrol" rows="15" cols="65"> </textarea> <br/> <label>decrypted value = </label><span id="decryptedValue"></span> <br/> <br/> <br/> <label for="privkey">Private Key</label><br/> <textarea id="privkey" rows="15" cols="65">-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDlOJu6TyygqxfWT7eLtGDwajtNFOb9I5XRb6khyfD1Yt3YiCgQ WMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76xFxdU6jE0NQ+Z+zEdhUTooNR aY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4gwQco1KRMDSmXSMkDwIDAQAB AoGAfY9LpnuWK5Bs50UVep5c93SJdUi82u7yMx4iHFMc/Z2hfenfYEzu+57fI4fv xTQ//5DbzRR/XKb8ulNv6+CHyPF31xk7YOBfkGI8qjLoq06V+FyBfDSwL8KbLyeH m7KUZnLNQbk8yGLzB3iYKkRHlmUanQGaNMIJziWOkN+N9dECQQD0ONYRNZeuM8zd 8XJTSdcIX4a3gy3GGCJxOzv16XHxD03GW6UNLmfPwenKu+cdrQeaqEixrCejXdAF z/7+BSMpAkEA8EaSOeP5Xr3ZrbiKzi6TGMwHMvC7HdJxaBJbVRfApFrE0/mPwmP5 rN7QwjrMY+0+AbXcm8mRQyQ1+IGEembsdwJBAN6az8Rv7QnD/YBvi52POIlRSSIM V7SwWvSK4WSMnGb1ZBbhgdg57DXaspcwHsFV7hByQ5BvMtIduHcT14ECfcECQATe aTgjFnqE/lQ22Rk0eGaYO80cc643BXVGafNfd9fcvwBMnk0iGX0XRsOozVt5Azil psLBYuApa66NcVHJpCECQQDTjI2AQhFc1yRnCU/YgDnSpJVm1nASoRUnU8Jfm3Oz uku7JUXcVpt08DFSceCEX9unCuMcT72rAQlLpdZir876 -----END RSA PRIVATE KEY-----</textarea><br/> <label for="pubkey">Public Key</label><br/> <textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlOJu6TyygqxfWT7eLtGDwajtN FOb9I5XRb6khyfD1Yt3YiCgQWMNW649887VGJiGr/L5i2osbl8C9+WJTeucF+S76 xFxdU6jE0NQ+Z+zEdhUTooNRaY5nZiu5PgDB0ED/ZKBUSLKL7eibMxZtMlUDHjm4 gwQco1KRMDSmXSMkDwIDAQAB -----END PUBLIC KEY-----</textarea><br/><script type="text/javascript">// Call this code when the page is done loading. $(function() {// Encrypt with the public key...var encrypt = new JSEncrypt();encrypt.setPublicKey($('#pubkey').val());var encrypted = encrypt.encrypt("I love you");document.getElementById("RSAcontrol").innerText = encrypted;// Decrypt with the private key...var decrypt = new JSEncrypt();decrypt.setPrivateKey($('#privkey').val());var uncrypted = decrypt.decrypt(encrypted);document.getElementById("decryptedValue").innerText = uncrypted;}); </script></div> </body> </html>
网页输出:
"I love you" RSA PUBLIC ENCRYPTED value =
4Bgtqo6qfIZKC97wdc89aph9FrJRDqzU71BrSaoiYp/G6tUG8L5bv9/6xmD5eMDbviwVNOKPveRsQcbpCBOOKqSx50SwnnHTm0TwFaNex9h3ldV4XLyl3+OjWGdNFLaq/OCdNbZ0B+xPDlQTw+UZn1PR3FRSzpgHwQNkuEGhsYA=
decrypted value = I love you
公钥和私钥生成器:
命令行生成:
https://github.com/travist/jsencrypt
http://help.alipay.com/support/help_detail.htm?help_id=397433
加密解密及其javascript实现相关推荐
- JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...
2019独角兽企业重金招聘Python工程师标准>>> 本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装 ...
- js怎么实现对html代码加密解密,javascript脚本加密解密及HTML转JS
HTML & Javascript 相互转换 < body > HTML & Javascript 输入 & 输出 < br > < script ...
- javascript base64加密解密
javascript base64加密解密 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8&q ...
- JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...
原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...
- 使用 ChatGPT 模型实现 JavaScript 加密解密技术
以下是一个使用 ChatGPT 模型实现混淆加密解密的案例代码.该代码使用 JavaScript 编写,并且使用了 TensorFlow.js 库来加载和执行 ChatGPT 模型.代码的目的是将输入 ...
- 文件加密解密之位异或运算解密(javascript篇)
这算是一个入门的文件加密解密文章吧.虽然说当今互联网信息共享.但是我真的搜索不到什么比较好的由浅入深讲解文件加密解密的文章.可能我的姿势不太对.这篇文章算是记录一下我的学习.也同时分享给大家.如果错误 ...
- javascript ←AES.CBC→ go 相互加密解密
文章目录 加密 go javascript 解密 go javascript 发现没有完整的 js 和 go 的CBC模式相互加密解密,记录一下 代码来自网络,进行一次整理 加密 go func Ae ...
- JavaScript加密解密7种方法!
本文一共介绍了七种JAVASCRIPT加密方法: 在做网页时(其实是网页木马呵呵),最让人烦恼的是自己辛辛苦苦写出来的客户端IE运行的JAVASCRIPT代码常常被别人轻易的拷贝,实在让自己的心里有点 ...
最新文章
- delphi variant和stream相互转换的函数
- 录播教室预约系统(八)-客户端部门管理员增加教室
- php和python区别-PHP与Python语言有哪些区别之处?选择哪一个好?
- html pc vw过大,细说em/rem/vh/vw与响应式布局
- Android典型界面设计(3)——访网易新闻实现双导航tab切换
- c#.net 生成清晰缩略图的解决方案
- 从3000元月薪码农到首席架构师的经历
- linux怎样判断线程是否暂停_怎样寻找合适的创业项目?如何判断一个创业项目是否靠谱?...
- B站晚会大火的 140 万个理由!
- Windows7安装IIS服务器
- Beyong Compare4过期解决办法
- #655 – 冒泡事件可能会被某些控件屏蔽(Bubbling Mouse Events Swallowed by Some Controls)
- 发一个自己常用的通信词汇缩写表(实时更新)
- Android查询通讯录信息
- 关于树叶的活动设计_大班游戏活动《有趣的叶子》教案
- 计算机c盘program,电脑c盘program files(x86)文件夹可以删除吗
- 10只小白鼠1000支药水找出毒药问题
- ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略
- Spring5框架-IOC容器
- 传智播客技术社区_播客与网络技术的未来