RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8

这篇具有很好参考价值的文章主要介绍了RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RSA加密

非对称加密算法,两个且不同的Key,一个公开,一个私密,公开加密,私密解密。

特点:

原文短,加密后密文长

生成相对较慢

安全性超强

生成公钥、私钥

我们使用.net进行生成公钥、私钥。

使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥,方法中接收一个参数,true 表示同时包含 RSA 公钥和私钥;false 表示仅包含公钥,需要注意的是这里生成的是XML格式。

RSACryptoServiceProvider rSA = new();
string pubKey = rSA.ToXmlString(false);//公钥
string priKey = rSA.ToXmlString(true);//私钥

后端使用 

在后端加密解密需要引入RSACryptoServiceProvider 类,该类提供了对RSA算法的实现执行非对称加密和解密,同时,该类是不可被继承的。

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

RSA加密

加密调用Encrypt(Byte[], Boolean)方法,第一个参数为需要加密的数据,是一个byte[]格式,返回同样为一个byte[]格式。

byte[] cipherbytes;
rsa.FromXmlString(pubKey);
cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(source), false);
var b = Convert.ToBase64String(cipherbytes);

RSA解密

解密调用Decrypt(Byte[], Boolean)方法,第一个参数为要解密的数据,是一个byte[]格式,返回同样为一个byte[]格式。

rsa.FromXmlString(priKey);
byte[] cipherbytex;
cipherbytex = rsa.Decrypt(Convert.FromBase64String(b), false);
var c = Encoding.UTF8.GetString(cipherbytex);

前端vue使用后端传递的公钥加密

我这里使用的加密库为JSEncrypt库,安装JSEncrypt库。

npm install jsencrypt -D

 在页面中对其引用。

import {JSEncrypt} from 'jsencrypt'

需要注意 :.net生成的公钥与私钥是XML格式,而前端JSEncrypt库使用时需要Pkcs8格式,我们这里需要在后端处理一下公钥再传递给前端,不然前端返回密文的时候为falae。

后端将XML格式转换为Pkcs8格式

我们需要在程序包管理控制台中安装XC.RSAUtil包

NuGet\Install-Package XC.RSAUtil -Version 1.3.6

这个包包含了几种转换的格式:

XML转Pkcs1

RsaKeyConvert.PrivateKeyXmlToPkcs1()私钥

RsaKeyConvert.PublicKeyXmlToPem()公钥

XML转Pkcs8

RsaKeyConvert.PrivateKeyXmlToPkcs8()私钥

RsaKeyConvert.PublicKeyXmlToPem()公钥

Pkcs1转XML 

RsaKeyConvert.PrivateKeyPkcs1ToXml()私钥

RsaKeyConvert.PublicKeyPemToXml()公钥

Pkcs8转XML 

RsaKeyConvert.PrivateKeyPkcs8ToXml()私钥

RsaKeyConvert.PublicKeyPemToXml()公钥

我这里使用RsaKeyConvert.PublicKeyXmlToPem() ,再将转换的值传递给前端,前端就能使用JSEncrypt进行RSA加密了。

string pubKey = rSA.ToXmlString(false);//公钥
string priKey = rSA.ToXmlString(true);//私钥
var keyList = RsaKeyConvert.PublicKeyXmlToPem(pubKey);//将xml格式转换为Pkcs8
return new { keyList };

 前端加密

虽然我们前端是可以解密的,但是处于安全考虑,我们只用将公钥传递给前端就可以了,私钥是不传递的,私钥是用于解码使用公钥加密的密文。

我们使用JSEncrypt库主要使用其中的几个方法:

setPublicKey('获取的公钥')设置公钥

setPrivateKey('获取的私钥')设置私钥

encrypt('加密内容')加密

decrypt('解密内容')解密

 这里我们使用公钥对对456进行加密。

postFdd().then(res => {
	console.log(res)
	var encryptor = new JSEncrypt()
	encryptor.setPublicKey(res.keyList)
	var rsaPassWord = encryptor.encrypt('456')
	// encryptor.setPrivateKey(res.priKey) //设置秘钥
	// var uncrypted = decrypt.decrypt(encryptor) //解密之前拿公钥加密的内容
	console.log(rsaPassWord)
})

我们打印出来可以看到 keyList是为Pkcs8格式,priKey是为XML格式,而下面那一段字段就是我们加密出来的密文。

jsencrypt 加密 false,c#,数据结构,vue.js

XML的格式以及Pkcs8格式

XML开头为<RSAKeyValue><Modulus>

Pkcs8格式开头为-----BEGIN PUBLIC KEY-----文章来源地址https://www.toymoban.com/news/detail-811046.html

到了这里,关于RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

    之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java进行RSA加解密,本文介绍下使用当下流行的Hutool工具进行RSA加解密的用法。 目录 一、在Linux环境下生成公钥、私钥文件 二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记 三、po

    2024年04月23日
    浏览(105)
  • vue使用jsencrypt实现rsa前端加密

    介绍 vue 完成 rsa 加密传输, jsencrypt 实现参数的前端加密 在 utils 文件夹中新建 jsencrypt.js 文件,内容如下: 注意点:一般公钥都是后端生成好的,之间给到前端,需要注意的需要让后端把生成的公钥放入 .txt 文件中。把 .txt 文件给前端,否则可能会出现无法使用的可能

    2024年02月09日
    浏览(56)
  • 【openssl】RSA 生成公钥私钥 |通过私钥获取公钥

    通过博客:Window系统如何编译openssl 编译出openssl.exe(位于apps文件夹下)。 现在需要使用它获得公钥私钥、通过私钥获取公钥 目录 说明!!! 一.定位openssl.exe目录 二、进入命令cmd 三、生成私钥 四、已知的私钥替换模板私钥 五、通过私钥生成公钥 a.生成公钥私钥:跳过第四

    2024年02月04日
    浏览(64)
  • C#.NET Framework RSA 公钥加密 私钥解密 ver:20230609

    C#.NET Framework RSA 公钥加密 私钥解密 ver:20230609   环境说明: .NET Framework 4.6 的控制台程序 。   .NET Framework 对于RSA的支持: 1. .NET Framework 内置只支持XML格式的私钥/公钥。如果要用PKCS1,PKCS8格式的,要用到三方库BouncyCastle。 2. .NET 中默认加密算法为“RSA/ECB/PKCS1Padding” ,要和

    2024年02月08日
    浏览(72)
  • C# .NET CORE .NET6 RSA 公钥加密 私钥解密

    环境说明: .NET CORE 版本:.NET 6 。   .NET CORE 对于RSA的支持: 1. .NET 6 中内置了对 PKCS1,PKCS8 2种私钥格式的支持。 2. 如果你要部署在Linux,docker ,k8s 中;一定要用 “RSA”这个类,不能是 .NET FRAMEWORK 的 RSACryptoServiceProvider。 3. .NET 中默认加密算法为“RSA/ECB/PKCS1Padding” ,要和JAVA互通

    2024年02月08日
    浏览(94)
  • 若依ruoyi前端vue使用jsencrypt.js加密后端java进行RSA解密(前后端交互RSA加解密)

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

    2024年02月06日
    浏览(75)
  • RSA加解密工具类(PKCS8公钥加密,PKCS1私钥解密)

    场景 :如果项目上生成的秘钥,公钥是PKCS8格式,私钥却是PKCS1格式。需要在这种场景加解密的话可以直接使用下面工具类。 特殊说明:私钥解密的时候必须把私钥源文件内容整个传入,不能删除私钥的文件头和文件尾,并且不能删除换行。

    2024年02月11日
    浏览(67)
  • 前端RSA加密方法jsencrypt以及encryptlong

    jsencrypt和encryptlong都是rsa加密,加密的对象一定要是字符串。 简单数据用前者,如果加密的是对象并且数据还挺多的,比如含有token 用后者。 生成密钥: RSA会产生两个密钥,其中公钥公开用于加密,私钥不公开用于解密。点击生成公钥密钥 NPM安装: jsencrypt NPM地址 encryptlo

    2024年02月15日
    浏览(49)
  • RSAUtil 前端 JavaScript JSEncrypt 实现 RSA (长文本)加密解密

    文章归档:https://www.yuque.com/u27599042/coding_star/cl4dl599pdmtllw1 import JSEncrypt from ‘jsencrypt’ import {stringIsNull} from “@/utils/string_utils.js”:https://www.yuque.com/u27599042/coding_star/slncupw7un3ce7cb import {isNumber} from “@/utils/number_utils.js”:https://www.yuque.com/u27599042/coding_star/tuwmm3ghf5lgo4bw 注意: 此方

    2024年04月22日
    浏览(69)
  • RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)

    1、采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。 2. 找出质数 P、Q P=11 Q=13 3. 计算公共模数 N = P * Q = 143 4. 欧拉函数 Φ(N) = (P-1)*(Q-1) = 10 *12 = 120 5. 计算公钥E 1Eφ(N) 所以1E120 E的取值范围{3,7,9,11,13,17,19,...,117,119} E的取值必须和φ(N)互质 取

    2024年02月09日
    浏览(96)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包