js实现rsa密钥的加密、解密与生成

这篇具有很好参考价值的文章主要介绍了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/254RMPU55Vu7FVewhd1fjn8qKhvSo7B
            sYpY11MaUuIoSsSvnJcvg8x6kZU1I1ohB4IgkXQhsVsBstr+abLKBNebr5LX5qBn
            ARlJ/ZZLrSlIi97c//86cJpmLOF94KzKI9vm98CHN32I7UxaBZs9epMDeQIDAQAB
            AoGBAIAnQqWCKGQUutEWMKbkZ92gbWYVTPFkQ0WER9ZovS5OTltQoRHtySSJhhBS
            WxTSJKJ7p8ofTDitJY4cS5yNeiFaXdA3C/E+M0KgNOhTIkaKMh1KrkOrDvff3oIp
            TT40/g9fO8QorIWp0CRWVE+qEG8gHhFLnj5ST2jxqVChQPrBAkEA9bwlzWmNsWG6
            nCn/9Hh1IRzjZAHrle2H8gtiPYKScrzsvkNNlEA1vFoUFjfMWklvRTZQbpJE05rS
            7azAKicSzQJBANm3qWfG5jhUVrZtPeWZacu8kGs0n0lQ/c285CMwVU9aUu760HkT
            siuK3WeJ31lOOVF6YbvZv60PZtQjx5Kb610CQAz9DOJ2mc6uY7atYaICW+6MIFjA
            4TrjezQH9gFaTXNTGRBVblxPqId0G2uxN1PuXbtCy62MfabRoCR/5QhVWGECQQCr
            KzdX7Mtxe/VUpZxlV/ESieStNIkK9k8kop5mgAiCQ8wyMSUYHAEXNK0PSxk7OEHe
            Ki6OpwqIgDRjEuJEBKvNAkEA7hQfSDCuDl4Cf5apfUyMH6eY1WNMexyZFcp+1njb
            VLQRL9rtbEeTCuZ/vsrA94HwlGx0CmSrinl0sA+cZg25xQ==
            -----END RSA PRIVATE KEY-----
            
        </textarea><br/>
        <!-- 一个公钥的例子 -->
        <textarea id="pubkey" rows="15" cols="65" style="display: none;">-----BEGIN PUBLIC KEY-----
            MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQ/Mgm9uPiUpmUvA4l/254RMPU
            55Vu7FVewhd1fjn8qKhvSo7BsYpY11MaUuIoSsSvnJcvg8x6kZU1I1ohB4IgkXQh
            sVsBstr+abLKBNebr5LX5qBnARlJ/ZZLrSlIi97c//86cJpmLOF94KzKI9vm98CH
            N32I7UxaBZs9epMDeQIDAQAB
            -----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 4096
            publicExponent: 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)文章来源地址https://www.toymoban.com/news/detail-577462.html

到了这里,关于js实现rsa密钥的加密、解密与生成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依ruoyi前端vue使用jsencrypt.js加密后端java进行RSA解密(前后端交互RSA加解密)

    目录 1、前后端RSA加解密实现思路 2、前端 3、后端 按照约定来说公钥一般用来加密,大家都可以获取得到,私钥用来解密,当然你也可以混着用,以下示例是前端通过加密,后端解密.  -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ81AMIIBCgKCAQEA1+05vAf7m5NcLNLkRtsm gp+QdzcW6MVdayGTGBJG0v

    2024年02月06日
    浏览(49)
  • RSA 加密解密算法实现(简单,易懂)!!!

    目录 一、什么是RSA算法 1.对称加密 2.非对称加密 3.非对称加密的应用 二、RSA算法的基础操作步骤 1.生成公钥和私钥 2.用公钥加密信息  3.用私钥解密信息 三、AC代码 六、RSA算法的测试  七、共勉     在计算机中常用的加密算法分为两类: 对称加密算法和非对称加密算法。

    2024年01月20日
    浏览(57)
  • 使用非对称加密(RSA) 实现前端加密后端解密

    数据加密方式有: 单向加密、对称加密、非对称加密、加密盐、散列函数、数字签名。 1、单向加密 单向加密通过对数据进行摘要计算生成密文,密文不可逆推还原。只能加密,不能解密,常用于提取数据的指纹信息以此来验证数据的完整性。但是会引发雪崩效应(雪崩效应

    2024年02月08日
    浏览(45)
  • Java代码实现RSA算法加密解密文件功能

    底层算法不做赘述,想要了解自行百度。 RSA属于非对称加密,非对称加密有公钥和私钥两个概念,私钥自己拥有,不能给别人,公钥公开。根据应用的不同,我们可以选择使用不同的密钥加密: 签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份

    2024年02月12日
    浏览(38)
  • JavaScript加密/解密与OpenAI的对接:生成加密对话的ChatGPT 4.0应用

    首先,我们来看一个简单的JavaScript加密算法的示例,该算法将输入的字符串每个字符的ASCII值加上1,并返回一个新的字符串。以下是加密函数的代码: 在这个函数中,我们首先创建一个空字符串 encryptedMessage ,然后遍历输入的字符串中的每个字符,使用 charCodeAt 函数获取其

    2023年04月27日
    浏览(46)
  • C语言中的 RSA加密和解密算法: 深度探索与实现

    RSA加密算法是一种非对称加密算法,即公开密钥加密,私有密钥解密。在公开密钥加密和私有密钥解密的过程中,密钥是不同的,这是与其他加密算法的主要区别。RSA算法的安全性依赖于大数分解,随着计算机的发展,对于大数的分解能力越来越强,RSA算法的密钥长度也在不

    2024年02月03日
    浏览(42)
  • RSA加密解密(无数据大小限制,php、go、java互通实现)

    RSA加解密中必须考虑到的**长度、明文长度和密文长度问题。明文长度需要小于**长度,而密文长度则等于**长度。因此当加密内容长度大于**长度时,有效的RSA加解密就需要对内容进行分段。 这是因为,RSA算法本身要求加密内容也就是明文长度m必须0m**长度n。如果小于这个长

    2024年02月15日
    浏览(53)
  • 从加密到签名:如何使用Java实现高效、安全的RSA加解密算法?

    目录 1. 接下来让小编给您们编写实现代码!请躺好 ☺ 1.1 配置application.yml文件 1.2 RSA算法签名工具类 1.3  RSA算法生成签名以及效验签名测试 1.4 RSA算法生成公钥私钥、加密、解密工具类 1.5 RSA算法加解密测试 我们为什么要使用RSA算法来进行加解密?  RSA 加密算法是一种非对

    2024年02月12日
    浏览(42)
  • RSA双向加解密(公钥加密-私钥解密;私钥加密-公钥解密)

            非对称加密算法中,提供一个公钥一个私钥。一般情况下,采用公钥加密、私钥解密的方式。         假设有这样一个场景:服务A与服务B需要通信,通信内容为了安全需要进行加密传输,并且服务A与服务B不能互相持有对方的钥匙。         我首先想到的是

    2024年02月11日
    浏览(42)
  • C#集成数据加密算法,包含DES、RSA、Base64、SHA、MD5算法,轻松实现数据加密解密需求

    在需要使用配置文件的工控软件中,往往需要在配置文件和数据库中对一些数据加密,即对一串数据进行加密算法后输出复杂符号和字符的形式,让非相关人员无法识别原有数据,从而对数据或数据库进行相应的保护,这往往也是公司安全部门的基本要求。 网上写加密算法的

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包