js实现rsa密钥的加密、解密与生成
今天想用js实现rsa的加解密的,在网上找了好久,下载啊什么的,十分麻烦,今天我也不bb的直接放代码
rsa.html
<!DOCTYPE html>
<html lang="zh-Cn"><head><title>javascript-rsa-Example</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!-- 导入必要js文件 --><script src="jquery.js"></script><script src="jsencrypt.min.js"></script></head><body> <!-- 一个私钥的例子 --><textarea id="privkey" rows="15" cols="65" style="display: none;">-----BEGIN RSA PRIVATE KEY-----MIICXgIBAAKBgQDQ/Mgm9uPiUpmUvA4l/254RMPU55Vu7FVewhd1fjn8qKhvSo7BsYpY11MaUuIoSsSvnJcvg8x6kZU1I1ohB4IgkXQhsVsBstr+abLKBNebr5LX5qBnARlJ/ZZLrSlIi97c//86cJpmLOF94KzKI9vm98CHN32I7UxaBZs9epMDeQIDAQABAoGBAIAnQqWCKGQUutEWMKbkZ92gbWYVTPFkQ0WER9ZovS5OTltQoRHtySSJhhBSWxTSJKJ7p8ofTDitJY4cS5yNeiFaXdA3C/E+M0KgNOhTIkaKMh1KrkOrDvff3oIpTT40/g9fO8QorIWp0CRWVE+qEG8gHhFLnj5ST2jxqVChQPrBAkEA9bwlzWmNsWG6nCn/9Hh1IRzjZAHrle2H8gtiPYKScrzsvkNNlEA1vFoUFjfMWklvRTZQbpJE05rS7azAKicSzQJBANm3qWfG5jhUVrZtPeWZacu8kGs0n0lQ/c285CMwVU9aUu760HkTsiuK3WeJ31lOOVF6YbvZv60PZtQjx5Kb610CQAz9DOJ2mc6uY7atYaICW+6MIFjA4TrjezQH9gFaTXNTGRBVblxPqId0G2uxN1PuXbtCy62MfabRoCR/5QhVWGECQQCrKzdX7Mtxe/VUpZxlV/ESieStNIkK9k8kop5mgAiCQ8wyMSUYHAEXNK0PSxk7OEHeKi6OpwqIgDRjEuJEBKvNAkEA7hQfSDCuDl4Cf5apfUyMH6eY1WNMexyZFcp+1njbVLQRL9rtbEeTCuZ/vsrA94HwlGx0CmSrinl0sA+cZg25xQ==-----END RSA PRIVATE KEY-----</textarea><br/><!-- 一个公钥的例子 --><textarea id="pubkey" rows="15" cols="65" style="display: none;">-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQ/Mgm9uPiUpmUvA4l/254RMPU55Vu7FVewhd1fjn8qKhvSo7BsYpY11MaUuIoSsSvnJcvg8x6kZU1I1ohB4IgkXQhsVsBstr+abLKBNebr5LX5qBnARlJ/ZZLrSlIi97c//86cJpmLOF94KzKI9vm98CHN32I7UxaBZs9epMDeQIDAQAB-----END PUBLIC KEY----- </textarea><br/><label for="privateKey_out">生成的rsa私钥</label><textarea id="privateKey_out" rows="15" cols="65"></textarea><br/><label for="publicKey_out">生成的rsa公钥</label><textarea id="publicKey_out" rows="15" cols="65"></textarea><br/></body><script type="text/javascript">//*****这里开始介绍如何生成"密钥和公钥"!!!***********function getRsaKeys(func){window.crypto.subtle.generateKey({name: "RSA-OAEP",modulusLength: 2048, //可以是 1024, 2048, or 4096publicExponent: new Uint8Array([0x01, 0x00, 0x01]),hash: {name: "SHA-512"}, //可以是 "SHA-1", "SHA-256", "SHA-384", or "SHA-512"},true, //密钥是否可提取 (i.e. 可以在 exportKey中使用)["encrypt", "decrypt"] //一定要是["encrypt", "decrypt"] 或者 ["wrapKey", "unwrapKey"]).then(function(key){window.crypto.subtle.exportKey("pkcs8", key.privateKey ).then(function(keydata1){window.crypto.subtle.exportKey("spki",key.publicKey ).then(function(keydata2){var privateKey = RSA2text(keydata1,1);var publicKey = RSA2text(keydata2);func(privateKey,publicKey);}).catch(function(err){console.error(err);});}).catch(function(err){console.error(err);});}).catch(function(err){console.error(err);});}function RSA2text(buffer,isPrivate=0) {var binary = '';var bytes = new Uint8Array(buffer);var len = bytes.byteLength;for (var i = 0; i < len; i++) {binary += String.fromCharCode(bytes[i]);}var base64 = window.btoa(binary);var text = "-----BEGIN "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----\n";text += base64.replace(/[^\x00-\xff]/g,"$&\x01").replace(/.{64}\x01?/g,"$&\n");text += "\n-----END "+(isPrivate?"PRIVATE":"PUBLIC")+" KEY-----";return text;}function displayRsaKeys(privateKey,publicKey) {privateKey_example1=privateKey;//得到rsa密钥和私钥!publicKey_example1=publicKey;document.getElementById("privateKey_out").innerHTML = privateKey_example1;//输出document.getElementById("publicKey_out").innerHTML = publicKey_example1;}getRsaKeys(displayRsaKeys);//*****这里开始介绍如何加解密!!!***********var example_public_key=$('#pubkey').val();//注意:密钥中含有“//”字符无法直接写不然会报错,所以用了html元素var example_private_key=$('#privkey').val();var example_text="我是一个要加密的文本";function encrypt1(public_key,sometext){//加密:需要两个参数public_key(公钥),sometext(要加密的文本)var encrypt = new JSEncrypt();encrypt.setPublicKey(public_key);var encrypted = encrypt.encrypt(sometext);return encrypted;}function decrypt1(private_key,encrypted_text) {//解密:需要两个参数private_key(私钥),encrypted_text(密文)var decrypt = new JSEncrypt();decrypt.setPrivateKey(private_key);var uncrypted = decrypt.decrypt(encrypted_text);return uncrypted;}var tmp01=encrypt1(example_public_key,example_text);document.write("<br>");document.write(tmp01);//输出一个加密document.write("<br>");tmp02=decrypt1(example_private_key,tmp01)document.write(tmp02);//输出一个解密</script>
</html>
生成完了后,可以去在线rsa网站上检测一下,RSA在线加解密
然后还需要在同一个文件夹下放入两个js文件,用于加解密!
下载链接:
rsa.zip - 蓝奏云
备用下载链接:
百度网盘 密码1234
参考文献:
travist/jsencrypt: (github.com)
js实现rsa密钥的加密、解密与生成相关推荐
- js rsa解密中文乱码,js中文rsa,中文加密偶尔解密不出来
https://blog.csdn.net/lionking1990/article/details/106092990 直接改动jsencrypt.js文件,在文件最下方的 JSEncrypt.ve ...
- RSA、MD5加密解密算法全套解析安装教程
第一部分介绍加密解密算法, 第二部分介绍我小组成功应用的RSA.MD5两种加密解密算法,以及心得体会. 1.加密解密算法介绍 应用的开发中安全很重要,所以信息加密技术显得尤为重要.我们需要对应用中的多 ...
- PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解...
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- Python crypto模块实现RSA和AES加密解密
Python crypto模块实现RSA和AES加密解密 Python的crypto是用于RSA加密解密,AES加密解密的. 一.RSA和AES简介 RSA加密算法是一种非对称加密算法.RSA 是19 ...
- RSA算法与加密解密
RSA算法与加密解密 什么是RSA算法(RSA algorithm) 什么是非对称加密算法 RSA加密解密原理 算法攻击和蓝桥杯2018年省赛题目 RSA的小指数攻击 蓝桥杯2018年省赛题目 第一步 ...
- js脚本锁计算机软件,JS使用插件cryptojs进行加密解密数据实例
本文实例讲述了JS使用插件cryptojs进行加密解密数据.分享给大家供大家参考,具体如下: Testing websockets var key = 'BOTWAVEE'; //CBC模式加密 fu ...
- JS基于编码方式实现加密解密文本
JS基于编码方式实现加密解密文本 严格来讲这是一种简单的编码方式:加密,将明文[注]转成编码.解密则是编码转码为明文本. [注:明文是指没有加密的文字(或者字符串),一般人都能看懂.] 下面源码用到 ...
- golang RSA (PKCS#1)加密解密
RSA非对称加密算法,基于PKCS#1规范, 我们在使用RSA的时候需要提供 公钥和私钥 , 我们可以通过openss来为我们生成对应的pem格式的公钥和私钥匙. 关于pkcs相关标准如下,摘自百度: ...
- Linux C/C++ Openssl RSA Encrypt/Decrypt(加密/解密) 简单示例教程
PEM文件有以下格式 1.PEM私钥文件格式 -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- 生成该密钥的Linux命令 : ...
最新文章
- 【419天】跃迁之路——程序员高效学习方法论探索系列(实验阶段176-2018.03.31)...
- 微信小程序php后台支付,微信小程序 支付功能实现PHP实例详解
- 在Spring data中使用r2dbc
- 一卦,测一下我心里想的事
- django中的form.is_valid()总是返回False
- 你会换吗?报告称将有大批iPhone用户升级苹果5G新机
- 随想录(cmake编译)
- linq to sql 详
- c语言 屏幕亮度调节_4096级屏幕亮度调节:改善安卓机自动亮度调节顽疾
- 数控机床现场数据采集与边缘计算方案
- CAD转JPG如何才能清晰?来看这两个方法
- 罗马数字转换阿拉伯数字
- C# 蓝牙编程(InTheHand.Net.Personal.dll-32feet),教程地址
- Unity 将图片转换成 sprite 格式
- java如何编写spi接口_软件模拟SPI接口程序代码(4种模式)
- 计算机怎么弹奏消愁,明日之后盗将行钢琴谱分享
- 接收灵敏度的定义公式
- 什么是CUDA、什么是GPU?
- bzoj 4808: 马
- java打包exe实例(使用javapackager)