ras私钥c#转java_Java与C#秘钥之间的转换
C#的秘钥与Java秘钥的区别
C#使用的是标准的RSA格式,然后将其中的数字base64编码后,生成XML进行存储。
Java中使用的是pkcs8、X.509的公私钥语法,存储的都是相应的JAVA类自动生成的base64字符串
C#私钥样式:
pJlJIR0+G/vs7mhycs0Zd5DbWokMCsLX7Ih373+ljlteRmTm8IHj0Sl8zA26Qu/oAmqh9OFk806zW3TXl90RghSeQhzZBXFHBrTFN4U/o3wPhZBdFazh80bbskrmQ/jmz70qUm3HmGzsb3toxzN6Ehakdo7qP2Kc6aOVTyXrYpk=
AQAB
1WKkFg6jlS2eZSVLiH1CK4b9uhr7qE1/L+tPqKQs+PzHX4eiZXnyAlQ+kgGmL7n1wR1RWNuiYnDZUetmTogaDQ==
xXhsuEnNJNQcQHEVTPZoulbMbTV1VZIDQ1zjG8fvu8sv6IBYcR5+EsC8n3/6RkW8/iCJDzxE++VHzhoSQSoDvQ==
zr/rcn+umd0Aisnu/Ik48smxz39TdIfaAwkBPsoL1Re+6V2WyLG1/fG4SmmUpsuMRRdt+SWdmbnzpr7peo++hQ==
MWi2W04sBEEGaKFi4QTuo2FAeTrdBvIn2t0M/lCCjYyDijtC5drpVKvhBk+xQZAFf9iIMsWzxQtTciBX3PI0SQ==
wGEfA3LWM4NHgRnXDqwwOUs3OtqWK0tsJPPcFMci+Bcgy96JpFTCr7bubXHMu14bdopCWUann2d3UuwEpvP+
mK3TRtMwRJb33OGnn9OeFumYfy92qxi3X6Hq1o6qDBW2qkd4bImfv+ni6AinyOVuaadt2Y+lq4dKGcCVJzoZvPm1VKxD2y7xKa8/vEbPRiRTt0qnPq9T7UJkpDsiXf/zOMfWdjc3uA1bPnQ65RWHSJ7zAE+Gd7xnyCE5MEyijLE=
C#公钥样式:
pJlJIR0+G/vs7mhycs0Zd5DbWokMCsLX7Ih373+ljlteRmTm8IHj0Sl8zA26Qu/oAmqh9OFk806zW3TXl90RghSeQhzZBXFHBrTFN4U/o3wPhZBdFazh80bbskrmQ/jmz70qUm3HmGzsb3toxzN6Ehakdo7qP2Kc6aOVTyXrYpk=
AQAB
Java私钥样式:
-----BEGIN PRIVATE KEY-----
MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAKCl0l2qYgZfZX38
IX3B8ejhX1cno4uIjOweCgVbf6cPQziB0Ov9jqgaiWX0W1rakqlrAITJmGk+q0XS
RisPx+vhNOxO8vKE0kTOlQapIaNHhJ11Ziq5ovmFzlTLkcFX0oNggunyOF7VN1FJ
Ifw0j7jQtIcFWpiNw3Qb6w+t3EdvAgMBAAECgYEAgl1udEIzIBbEJtO3XfVIWYKi
uvhY2H+sVGQgH67bzXcuRqnaH9f4r2QxgcIlbHoZMFC78AYkn6uSk6uK86Dvy6q4
WlhbDEhzjl1I6oRkFl+qazO8heBdkjMAVla4bK5wbo1WpihPJcbrEeFylpEHIlh6
l5IUESrG7ur24eY9CPECQQDVejq0ypAUSNbiZ5bxVufBl4J3Q2dCP8wlVafcFrRm
sCbkeJfIDVBFMLxoMNnhElIhnyPwMTk6E60LwMFYf6iHAkEAwKWq84PTJtZJ3C4+
++B+6+hOlDgoKq+Ujse3rdgPqsTZHlkaLGonGNet2pJCMth9xE/KMhkDwlcoDV6Z
65pr2QJBAK3DhT+d1jM8qvS0/y9I3vI8gizTx5wsU95b33uNW6BuZ+n2ow1qkNkQ
93sTsHW8tO+7GsSrPHqig2uapYaEuscCQAokLn2nQORYf4bhwFsOFGBi2FAhLKwi
lhV2GgtCxoBc4Hkig6g25lv+bp6E+IsormY5NRGyE2qVn/wkMMIgXPECQQC6GnPc
ryNA5yzu+bdu+DTTt3uh/XmDRw9xIfPKHTFHGWHnaCf3TFU2qk8HMPSQN2nIYrZs
5b2Guhxsb+dcNuHC
-----END PRIVATE KEY-----
Java公钥样式:
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgpdJdqmIGX2V9/CF9wfHo4V9X
J6OLiIzsHgoFW3+nD0M4gdDr/Y6oGoll9Fta2pKpawCEyZhpPqtF0kYrD8fr4TTs
TvLyhNJEzpUGqSGjR4SddWYquaL5hc5Uy5HBV9KDYILp8jhe1TdRSSH8NI+40LSH
BVqYjcN0G+sPrdxHbwIDAQAB
-----END PUBLIC KEY-----
Java代码实现秘钥之间的转化
import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateCrtKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.RSAPrivateCrtKeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.util.Base64;
/**
* C#秘钥与Java互转
*/
public class CSharpOrJavaUtil {
/**
* C#私钥转换成java私钥
*/
public static String privateKeyFromXml(String privateKeyXml) {
privateKeyXml = privateKeyXml.replaceAll("\r", "").replaceAll("\n", "");
KeyFactory keyFactory;
try {
String modulusXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 9, privateKeyXml.indexOf(""));
BigInteger modulus = new BigInteger(1, Base64.getDecoder().decode(modulusXml));
String publicExponentXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 10, privateKeyXml.indexOf(""));
BigInteger publicExponent = new BigInteger(1, Base64.getDecoder().decode(publicExponentXml));
String privateExponentXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 3, privateKeyXml.indexOf(""));
BigInteger privateExponent = new BigInteger(1, Base64.getDecoder().decode(privateExponentXml));
String primePXml = privateKeyXml.substring(privateKeyXml.indexOf("
") + 3, privateKeyXml.indexOf("
"));
BigInteger primeP = new BigInteger(1, Base64.getDecoder().decode(primePXml));
String primeQXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 3, privateKeyXml.indexOf("
"));
BigInteger primeQ = new BigInteger(1, Base64.getDecoder().decode(primeQXml));
String primeExponentPXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 4, privateKeyXml.indexOf(""));
BigInteger primeExponentP = new BigInteger(1, Base64.getDecoder().decode(primeExponentPXml));
String primeExponentQXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 4, privateKeyXml.indexOf(""));
BigInteger primeExponentQ = new BigInteger(1, Base64.getDecoder().decode(primeExponentQXml));
String crtCoefficientXml = privateKeyXml.substring(privateKeyXml.indexOf("") + 10, privateKeyXml.indexOf(""));
BigInteger crtCoefficient = new BigInteger(1, Base64.getDecoder().decode(crtCoefficientXml));
RSAPrivateCrtKeySpec rsaPriKey = new RSAPrivateCrtKeySpec(modulus, publicExponent, privateExponent, primeP, primeQ, primeExponentP, primeExponentQ, crtCoefficient);
keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(rsaPriKey);
byte[] bytes = Base64.getEncoder().encode(privateKey.getEncoded());
return new String(bytes, Charset.forName("utf-8"));
} catch (Exception e) {
System.err.println(e.toString());
}
return null;
}
/**
* C#公钥转换成java公钥
*/
public static String publicKeyFromXml(String publicKeyXml) {
KeyFactory keyFactory;
publicKeyXml = publicKeyXml.replaceAll("\r", "").replaceAll("\n", "");
try {
String modulusXml = publicKeyXml.substring(publicKeyXml.indexOf("") + 9, publicKeyXml.indexOf(""));
BigInteger modulus = new BigInteger(1, Base64.getDecoder().decode(modulusXml));
String exponentXml = publicKeyXml.substring(publicKeyXml.indexOf("") + 10, publicKeyXml.indexOf(""));
BigInteger publicExponent = new BigInteger(1, Base64.getDecoder().decode(exponentXml));
RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, publicExponent);
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(rsaPubKey);
byte[] bytes = Base64.getEncoder().encode(publicKey.getEncoded());
return new String(bytes, Charset.forName("utf-8"));
} catch (Exception e) {
System.err.println(e.toString());
return null;
}
}
/**
* java私钥转换成C#私钥
*/
public static String privateKeyToXml(RSAPrivateCrtKey privateKey) {
String modulusBase64 = Base64.getEncoder().encodeToString(privateKey.getModulus().toByteArray());
String modulus = modulusBase64.replace("\r", "").replace("\n", "");
String exponentBase64 = Base64.getEncoder().encodeToString(privateKey.getPublicExponent().toByteArray());
String exponent = exponentBase64.replace("\r", "").replace("\n", "");
String pBase64 = Base64.getEncoder().encodeToString(privateKey.getPrimeP().toByteArray());
String p = pBase64.replace("\r", "").replace("\n", "");
String qBase64 = Base64.getEncoder().encodeToString(privateKey.getPrimeQ().toByteArray());
String q = qBase64.replace("\r", "").replace("\n", "");
String dpBase64 = Base64.getEncoder().encodeToString(privateKey.getPrimeExponentP().toByteArray());
String dp = dpBase64.replace("\r", "").replace("\n", "");
String dqBase64 = Base64.getEncoder().encodeToString(privateKey.getPrimeExponentQ().toByteArray());
String dq = dqBase64.replace("\r", "").replace("\n", "");
String dBase64 = Base64.getEncoder().encodeToString(privateKey.getPrivateExponent().toByteArray());
String d = dBase64.replace("\r", "").replace("\n", "");
String inverseQBase64 = Base64.getEncoder().encodeToString(privateKey.getCrtCoefficient().toByteArray());
String inverseQ = inverseQBase64.replace("\r", "").replace("\n", "");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("\n");
stringBuilder.append("").append(modulus).append("\n");
stringBuilder.append("").append(exponent).append("\n");
stringBuilder.append("
").append(p).append("
\n");
stringBuilder.append("").append(q).append("
\n");
stringBuilder.append("").append(dp).append("\n");
stringBuilder.append("").append(dq).append("\n");
stringBuilder.append("").append(inverseQ).append("\n");
stringBuilder.append("").append(d).append("\n");
stringBuilder.append("");
return stringBuilder.toString();
}
/**
* java公钥转换成C#公钥
*/
public static String publicKeyToXml(RSAPublicKey publicKey) {
String modulusBase64 = Base64.getEncoder().encodeToString(publicKey.getModulus().toByteArray());
String modulus = modulusBase64.replace("\r", "").replace("\n", "");
String exponentBase64 = Base64.getEncoder().encodeToString(publicKey.getPublicExponent().toByteArray());
String exponent = exponentBase64.replace("\r", "").replace("\n", "");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("\n");
stringBuilder.append("").append(modulus).append("\n");
stringBuilder.append("").append(exponent).append("\n");
stringBuilder.append("");
return stringBuilder.toString();
}
public static void main(String[] args) {
String privateXml =
"\n" +
" pJlJIR0+G/vs7mhycs0Zd5DbWokMCsLX7Ih373+ljlteRmTm8IHj0Sl8zA26Qu/oAmqh9OFk806zW3TXl90RghSeQhzZBXFHBrTFN4U/o3wPhZBdFazh80bbskrmQ/jmz70qUm3HmGzsb3toxzN6Ehakdo7qP2Kc6aOVTyXrYpk=\n" +
" AQAB\n" +
"
1WKkFg6jlS2eZSVLiH1CK4b9uhr7qE1/L+tPqKQs+PzHX4eiZXnyAlQ+kgGmL7n1wR1RWNuiYnDZUetmTogaDQ==
\n" +
" xXhsuEnNJNQcQHEVTPZoulbMbTV1VZIDQ1zjG8fvu8sv6IBYcR5+EsC8n3/6RkW8/iCJDzxE++VHzhoSQSoDvQ==
\n" +
" zr/rcn+umd0Aisnu/Ik48smxz39TdIfaAwkBPsoL1Re+6V2WyLG1/fG4SmmUpsuMRRdt+SWdmbnzpr7peo++hQ==\n" +
" MWi2W04sBEEGaKFi4QTuo2FAeTrdBvIn2t0M/lCCjYyDijtC5drpVKvhBk+xQZAFf9iIMsWzxQtTciBX3PI0SQ==\n" +
" wGEfA3LWM4NHgRnXDqwwOUs3OtqWK0tsJPPcFMci+Bcgy96JpFTCr7bubXHMu14bdopCWUann2d3UuwEpvP+\n" +
" mK3TRtMwRJb33OGnn9OeFumYfy92qxi3X6Hq1o6qDBW2qkd4bImfv+ni6AinyOVuaadt2Y+lq4dKGcCVJzoZvPm1VKxD2y7xKa8/vEbPRiRTt0qnPq9T7UJkpDsiXf/zOMfWdjc3uA1bPnQ65RWHSJ7zAE+Gd7xnyCE5MEyijLE=\n" +
"";
System.out.println(privateKeyFromXml(privateXml));
}
}
ras私钥c#转java_Java与C#秘钥之间的转换相关推荐
- ras私钥c#转java_RSA密钥,JAVA与.NET之间转换
最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 53KnujHcV0962zoLigW8d4AUb+1TS3LiySGrXhF5 ...
- int 转interger java_Java中Integer和int之间的转换
int到Integer: int a=3; Integer A=new Integer(a); 或: Integer A=Integer.valueOf(a); Integer到int: Intege ...
- 密码算法原理与分析:RSA安全与秘钥基础设施
本文转自网络文章,内容均为非盈利,版权归原作者所有. 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除. 原文作者:evilpan 原文地址:RSA安全与秘钥基础设施 目录 前言 RSA原理 秘钥 ...
- SQL Server 非对称秘钥管理
在<SQL Server 非对称秘钥在数据加密中的应用>一文中,我们了解到可以使用非对称秘钥进行数据加密.本文带着大家深入了解非对称秘钥的生命周期,包括创建.修改和删除. 为了熟悉非对称 ...
- java支付宝当面付接口_支付宝当面付秘钥生成教程(加对接案例)
总是有小伙伴犯愁支付宝当面付的秘钥生成,看着挺高大上,实际上不是很麻烦,给大家分享一下生成过程,以及对接我们伟大的sspanel的方法 准备 开通了支付宝当面付的账号一枚(本人代开,50大洋,地址:联 ...
- Openssl如何生成并验证公秘钥对
在没有PKI,也即Public Key Instrastructure的时候,用的是对称加密,也即双方持有同一个秘钥,用同一个秘钥进行加密和解密. 这种方式表面上看没有问题,但是仔细一想,共享的秘钥如 ...
- RSA安全与秘钥基础设施
之前写过一篇对称加密与攻击案例分析,而对于非对称加密,虽然接触的时间不短了,但一直没有很系统的记录过.因此趁着国庆家里蹲的五天长假,就来好好回顾总结一下. 前言 其实从加密的定语就能看出,对称加密表示 ...
- ras私钥c#转java_C#和JAVA的RSA密钥、公钥转换
C#的秘钥跟JAVA的密钥区别 RSA对于程序本身是没有区别的,其格式都是相同的.对于不同的程序来说,存储使用的语法(包装的类)会有所不同. RSA语法和语法标准有很多,大的类型大概分为ASN.1.P ...
- SSH公钥原理(密钥,秘钥,私钥)(看了还是懵逼啊!)
文章目录 1. 初见SSH 2. SSH工作原理 1. 基于口令的认证 2.基于公钥认证 3. SSH实践 4 总结 3. 为什么需要known_hosts? 1. 初见SSH SSH是一种协议标准, ...
最新文章
- C语言基本数据结构之四(线性,对分,二叉树查找及二叉树删除)
- 超级数学计算机,超级计算器+
- 聚类算法 sklearn k_means (返回一维数据的最优聚类)
- 100 个网络基础知识普及,看完成半个网络高手! 【厦门微思网络】
- 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
- 自己动手制作(DIY)一个Mini-Linux系统
- boost::multi_array模块测试 index_gen 的代码
- Ext js call方法
- 删除xenserver的iso库
- PHPCMS 模板标签
- 73 ----空间曲线的投影、投影柱面与投影曲线的方程、二元函数的等值线、等高线的性质
- [原]SyntaxError: invalid syntax 小问题
- Spark安装和编程实践(Spark2.4.0)
- 重症监护病人心电导联信号质量评估、SQI
- 高等代数第3版下 [丘维声 著] 2015年版_3折购书优惠码限时抢(人工智能类)
- Spring使用标签aop:aspectj-autoproxy 出的一些错
- SVG不能铺满的问题
- springcloud24:分布式事务 Seata处理分布式事务总结篇
- 有的人呀,他真的是带不动。。。
- 【LOJ6515】贪玩蓝月
热门文章
- 组播风暴引起的路由系统重启(LLMNR协议)
- 不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较
- Jmeter后置处理器之BeanShell
- ssbc 手撕包菜运行一段时间就停止的原因
- 通用能力——数量关系专项练习
- 帮我写一份关于快递取件的通知,内容是要求公司的门卫负责对到件的快递进行登记,而员工需要凭身份证登记取件,如果有快递丢失的情况,则对门卫进行罚款处罚...
- 目前市面各种加密狗原理介绍
- 容器化 hadoop 3.1.1Docker-Compose方式
- 源代码防泄密,SDC沙盒安全性如何?
- php 换行 html_总结html,css中的各种换行方法