c# RSA加密解密,与java代码互通问题
RSA加密解密原本是公开算法,但是和一个java的小伙伴对接却出现了点问题,现在记录一下
首先,RSA的公钥私钥,有2种:
1、pem格式。
2、xml格式。
文章底部有pem格式和对应的xml样本数据(样本数据太长,放在尾部)
对比样本数据知道,如果对方发过来的公钥私钥是带有类似 -----BEGIN PRIVATE KEY----- 这种字符串的,那肯定是pem格式的,如果用c#来使用的话,我们得先转为 xml 格式的,如果为了方便我们直接选一家在线转换的网站即可,比如 https://the-x.cn/certificate/PemToXml.aspx (有密钥泄露风险,可以选择自己写代码来转换,c#有一个库叫 BouncyCastle 可以转换)
这样一来就有对应的xml公钥和私钥了,然后,在用下面的c#代码进行加解密就可以了。
如果和java的小伙伴还有争议的话,可以选一个第三方网站作为参照,C#的小伙伴只要把字符串加密后丢到第三方网站能解密,第三方网站加密后的结果能被c#代码解密,代表c#就没问题了,java的小伙伴也做同样的操作,就可以不用老怀疑对方写的有问题了。。。。。
第三方网站比如:https://www.bejson.com/enc/rsa/
/// <summary>
/// RSA加密
/// </summary>
/// <param name="xmlPublickey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSAEncrypt(string xmlPublickey, string content)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(xmlPublickey); cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false); return Convert.ToBase64String(cipherbytes);
} /// <summary>
/// RSA解密
/// </summary>
/// <param name="xmlPrivatekey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSADecrypt(string xmlPrivatekey, string content)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
byte[] cipherbytes;
rsa.FromXmlString(xmlPrivatekey);
cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false); return Encoding.UTF8.GetString(cipherbytes);
}
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwF4/zAUR9+5DG3FPysdb
uM3cUARJFQUsNxXmKX9dVwe9rwqnTW2udMcXWmNvmrXIN78Rv38oEwDATww+/0W2
RXjPuUPOwnUieuAEvE6PGYspUtS/1Yhs01M+XmroEDjTmna09aGcDcSGYKgYNTK/
V+Hz3f2DR5/Uhd7tqJXx+0yDm8RJ6uQoDtWSba4XvyZcKN0qeNLCjmj1UHjtcI00
wSZvmtxWvSeBisDFnMPpybua9AwDRA4Ovr0SSatX6hkHwghih43RoHUr0uj2JZYC
qxhmiyQxQj/GPNTgxzhz59Ta+P7+DZ4ehVPgkKc7fAV6OKeGzL9tJKG26eHSLMR4
TwIDAQAB
-----END PUBLIC KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDAXj/MBRH37kMb
cU/Kx1u4zdxQBEkVBSw3FeYpf11XB72vCqdNba50xxdaY2+atcg3vxG/fygTAMBP
DD7/RbZFeM+5Q87CdSJ64AS8To8ZiylS1L/ViGzTUz5eaugQONOadrT1oZwNxIZg
qBg1Mr9X4fPd/YNHn9SF3u2olfH7TIObxEnq5CgO1ZJtrhe/Jlwo3Sp40sKOaPVQ
eO1wjTTBJm+a3Fa9J4GKwMWcw+nJu5r0DANEDg6+vRJJq1fqGQfCCGKHjdGgdSvS
6PYllgKrGGaLJDFCP8Y81ODHOHPn1Nr4/v4Nnh6FU+CQpzt8BXo4p4bMv20kobbp
4dIsxHhPAgMBAAECggEAFz3L22xpZVkGBpTEHS3E6SkGCyzZX47GbslYi3712gP3
aOSSngo4X6eGLMeCvmBkFkghbs+AGfunQGWsXs8fXHliL3H/0wKv7cSPDek35NAp
Z/aITtYyv7149ZNZAky7VBgveNXTst4hlh/4/MRq1cVY32M3rzmiRaJPeGTVXZUF
LCXQE6tlgwjomAgCLzt2uOSmZ9sWMtAnFXFDrSnrZRNTbgzZLkIm3yCxzTpaY8GW
jok4pTwp9pCrD2XwQppSpMZtFGMGzIo8a7EL0ZZYftaZTHm1XkSdZ309qDrO4pfq
mvjErWmobVowpnXEqHhQ+l42Bx99o0NNjLIILJB70QKBgQDw0t9YrwczNN7K5zJW
/aZkMj5kBmjgK0uycL/hmWx81AkOwsNV4r62N6Oiq4IzSfvtXcyt/a7zPhx5cQcs
8VyWZr7XModS8HNsEjSXdN0r84h5x5HffGTSEyfIw1aG/3rTrVGnO6zL6GYlMnFZ
fKiMEnQ3Ag3SVh/d9qSNQREGXQKBgQDMfajdAtj5TJj3N1ERi1LmbZ67slEd4VMg
8GUDWw2PakdT/xSRA/HHNaRAbl/LH3dwioz0db5AmGcfuw7fXQJeHcIlI32AMFQ6
SoSqIZ4x6v+X07Rm2oxFDXZaHh7dy76rchtoFEaePF38hu88ITb9tfjX/j7eSk5Z
f/WHsrY2mwKBgQDLbVW9VByA5OhN/X5IfXtQqCCL3d45flkzIorzxuYdi/8auOrI
YgE3a0iO4NHbAWQN3m5Hi0N9tbnX2+Jz1G6hnakXn1cweG0HnVlPlyg9ODrQpARV
BH8l9YhlzpwI7UaUCJQw7/fHR0kBotqc/PBjYjNJRDLoulew5+eYap43AQKBgDzs
+5DNtmOghLqzSn4Vqp9o7bAykqR6a9AWj6IOUN335kSKbVA/gpu9ybBAsl3MhEON
pC15nzOTtLXpf6bhCUGNUDjMeCnnPFEZvqkJ1x48S+aqdsdmOgCg4DA9ZSjj+W0P
VEcQM3IVvlLsyP57Tu0MeJWx9H06WlmkHD1P66YdAoGAeO5dEj0Qw1zQmjm4p8o/
WQRzZzP7E+jCiGB3KecFsnBCLP1Lst1A6rOnF/KZdjSaNyqtCkVitIfUvKMi83Qz
YjUZctyyODRFTid/eNBFAmYdP8et5iCZXrb3LspfQTzQxE/4qwavNE3rdKKljrSU
5nVh7VZtyG1BZl3CsEwlgVQ=
-----END PRIVATE KEY-----
对应公钥xml格式
<RSAKeyValue>
<Exponent>AQAB</Exponent>
<Modulus>wF4/zAUR9+5DG3FPysdbuM3cUARJFQUsNxXmKX9dVwe9rwqnTW2udMcXWmNvmrXIN78Rv38oEwDATww+/0W2RXjPuUPOwnUieuAEvE6PGYspUtS/1Yhs01M+XmroEDjTmna09aGcDcSGYKgYNTK/V+Hz3f2DR5/Uhd7tqJXx+0yDm8RJ6uQoDtWSba4XvyZcKN0qeNLCjmj1UHjtcI00wSZvmtxWvSeBisDFnMPpybua9AwDRA4Ovr0SSatX6hkHwghih43RoHUr0uj2JZYCqxhmiyQxQj/GPNTgxzhz59Ta+P7+DZ4ehVPgkKc7fAV6OKeGzL9tJKG26eHSLMR4Tw==</Modulus>
</RSAKeyValue>
对应私钥xml格式
<RSAKeyValue>
<D>ZhmWm6OJZeVns6sTkBshpxbOw88ePD9YFWZoTC2pY70Aan8eMdemareYB2b16cf+QvBL/M/Ik6NBxgMust88xYV9pN0Txsno2s8DWB0h6JKDc3mU+zwiFz9GIuEpndbdWcvPcbE6VgkeFgnGYcLpx3Gx1gD5iE07lVolCUrlHp7uV23jm8CSd/aiP29uVD903r+BSJbsynVs6LClZ3TOFYtuFP9Iu905OYL2b8b5C5wjMbdfdPtMf2NGzTEsuwo0GNMZs9XBhDyYz9jvOoiusiou1MVaON9z805fNvLN2xKRAYu+gtmfIhjk8+m56EVyW3n4JQEQYgb5aD83KWZ8IQ==</D>
<DP>HLAEKJf+bWQb+LpityHyXWZMSgGaxxH+fKRPfL1wTgYq7pvGG50sFQLG+RKz7DcsXn0NU8dyZO8K3ZVk0CPy/ZFq9bf4xEt/9XBFqQFAxZCtys9puV9CmE7HitCuW1M8heIFjJZ0L2wBpQDxJqqO2DiUJLDwOY4uNkrfLegVx8E=</DP>
<DQ>K3UgHl2qCLVwBgBsVY2Jj+0SyEmDY8WWpTJ+f2U4/+nSoNEwCXx6ZKAKvtrhV4zvENv6PTddg9+mk7U3DKNiW/oU+1MBO6tJMBWJOx/lnoZ1KUd0v/f5I+/RNLrDfDPOA0QzhNwVZAl9iqSkx76Pg/LJEgjSj2ZDBb3TSRZby6E=</DQ>
<Exponent>AQAB</Exponent>
<InverseQ>M1YfvCVCOuflOFLyfsCn7n1IXS9S1KyiPZjVszBC7g2JeXBCsbK01qH8JfhQ/N9o4LcmJ9hr0893LYirdCy4nLbOUiCrXWnfqSZNQYjND4//0VwwK/aOFPEZygjNlhi8S6ZW8V3+1EA6pCtzBVw241L8jGVx2dV0KQgsnAhJGHg=</InverseQ>
<Modulus>2tInX9DkdeXX3/FThKgE6F7RO24dNk3X589KY1J7usTSQsk2bs6q2pp7X+PZMdpgr1N3P4xQXTFp3xtj1WuzHsBtHtbXZ3sNsZ9bkkRY44xE3bFcCZ6/fYvC53km4OLeLN2YFef5KZg9z1viMVIMOctRoWfqLVkMp5VltCsEfdoXYJymhIbNRIPCHJOe7pRwfJ4fsCbumHAYY0J05K3ozR7eXDcJKP/mSYqHyfwK/DqeoH0YtPR1/aKtuiz0+QJ9Bk5/BRva+lwFk3LTpk/ReJJNklBMm898JQ5tU49wk26j0bLJDo1KyYpnTqoQ70kmBLWZzCExNyETxFTNPEUVIw==</Modulus>
<P>7jpqaofyrjWAezX1aNxd60Lgeu+tPYb+Am0gFS33SgnkY1kIafvWjN+Pwo1U88YmVKToirrIeog7k4k5qNTk7l31EqZK4Bb5acFM+/FEFM6sbGG4Zw4DGZsMYM1OHFZo4CnkMCNRSQ5v4PGJp17EiL1RyOQA3AHPGVYz7QhLQDE=</P>
<Q>6yUbIMGdYxMfWqQQsm2M91j/b9u5Q3yrWHUWXBASXr/M0m0/zYm4VG03xqD59tUw/TCYCSopKC7jqgOb8FOCL0UCJLEhyigB7mNIYkOmsBt4Yq0a33c7GDMsZbTCmVkoDel8TW8jgtnRwdJVe4FWScVur43LFHoiEkeL0C7FiZM=</Q>
</RSAKeyValue>
c# RSA加密解密,与java代码互通问题的更多相关文章
- RSA加密&解密【Java&Scala】
一.简介 RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用. RSA公开密钥密码体制.所谓公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解 ...
- C# 与JAVA 的RSA 加密解密交互,互通,C#使用BouncyCastle来实现私钥加密,公钥解密的方法
因为C#的RSA加密解密只有公钥加密,私钥解密,没有私钥加密,公钥解密.在网上查了很久也没有很好的实现.BouncyCastle的文档少之又少.很多人可能会说,C#也是可以的,通过Biginteger ...
- C# Java间进行RSA加密解密交互
原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...
- C# Java间进行RSA加密解密交互(二)
原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...
- C# Java间进行RSA加密解密交互(三)
原文:C# Java间进行RSA加密解密交互(三) 接着前面一篇C# Java间进行RSA加密解密交互(二)说吧,在上篇中为了实现 /** * RSA加密 * @param text--待加密的明文 ...
- RSA加密解密及数字签名Java实现--转
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院 ...
- (转)RSA加密解密及数字签名Java实现
转:http://my.oschina.net/jiangli0502/blog/171263?fromerr=hc4izFe2 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rives ...
- Java Base64加密、解密原理Java代码
Java Base64加密.解密原理Java代码 转自:http://blog.csdn.net/songylwq/article/details/7578905 Base64是什么: Base64是 ...
- Java使用RSA加密解密签名及校验
RSA加密解密类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- C#-java RSA加密解密
using Org.BouncyCastle.Math; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Securi ...
随机推荐
- WEB入门 - 文件上传
WEB入门 - 文件上传 参考文章 https://fushuling.com/index.php/2023/08/20/ctfshow刷题记录持续更新中/ https://www.cnblogs.c ...
- 洛谷P1057
#include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...
- 今天我们来聊Java IO模型,BIO、NIO、AIO三种常见IO模型
一.写在开头 很久没更新喽,最近build哥一直在忙着工作,忙着写小说,都忘记学习自己的本职了,哈哈,不过现在正式回归! 我们继续学习Java的IO相关内容,之前我们了解到,所谓的IO(Input/O ...
- jQuery 插件autocomplete 应用
项目中有时会用到自动补全查询,就像Google搜索框.淘宝商品搜索功能,输入汉字或字母,则以该汉字或字母开头的相关条目会显示出来供用户选择, autocomplete插件就是完成这样的功能. auto ...
- linux 查看crontab任务执行情况
首先创建一个定时任务,例如: */1 * * * * /usr/bin/curl http://******/admin/Keeperclock/keeper >> /data/wwwro ...
- VS Code 开发统一代码格式化配置
eslint: 是用来做代码风格检查的,比较关注代码质量,并且会提示不符合风格规范的代码,也有一部分代码格式化的功能.不是消除空行. "editor.formatOnSave": ...
- pandas无法打开.xlsx文件,xlrd.biffh.XLRDError: Excel xlsx file; not supported
原因是最近xlrd更新到了2.0.1版本,只支持.xls文件.所以pandas.read_excel('xxx.xlsx')会报错. 可以安装旧版xlrd,在cmd中运行: pip uninstall ...
- 微服务集成springsecurity实现认证
module:auth 1.添加依赖:spring-cloud-starter-security与spring-cloud-starter-oauth2 2.配置WebSecurityConfig:注 ...
- 【WPF】Command 的一些使用方案
Command,即命令,具体而言,指的是实现了 ICommand 接口的对象.此接口要求实现者包含这些成员: 1.CanExecute 方法:确定该命令是否可以执行,若可,返回 true:若不可,返回 ...
- NPIO在指定位置插入新列(附案例和代码)
背景: I could be mistaken as I am not that familiar with NPOI, however, after a minor search, it appea ...