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#秘钥之间的转换相关推荐

  1. ras私钥c#转java_RSA密钥,JAVA与.NET之间转换

    最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 53KnujHcV0962zoLigW8d4AUb+1TS3LiySGrXhF5 ...

  2. int 转interger java_Java中Integer和int之间的转换

    int到Integer: int a=3; Integer A=new Integer(a); 或: Integer A=Integer.valueOf(a); Integer到int: Intege ...

  3. 密码算法原理与分析:RSA安全与秘钥基础设施

    本文转自网络文章,内容均为非盈利,版权归原作者所有. 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除. 原文作者:evilpan 原文地址:RSA安全与秘钥基础设施 目录 前言 RSA原理 秘钥 ...

  4. SQL Server 非对称秘钥管理

    ​在<SQL Server 非对称秘钥在数据加密中的应用>一文中,我们了解到可以使用非对称秘钥进行数据加密.本文带着大家深入了解非对称秘钥的生命周期,包括创建.修改和删除. 为了熟悉非对称 ...

  5. java支付宝当面付接口_支付宝当面付秘钥生成教程(加对接案例)

    总是有小伙伴犯愁支付宝当面付的秘钥生成,看着挺高大上,实际上不是很麻烦,给大家分享一下生成过程,以及对接我们伟大的sspanel的方法 准备 开通了支付宝当面付的账号一枚(本人代开,50大洋,地址:联 ...

  6. Openssl如何生成并验证公秘钥对

    在没有PKI,也即Public Key Instrastructure的时候,用的是对称加密,也即双方持有同一个秘钥,用同一个秘钥进行加密和解密. 这种方式表面上看没有问题,但是仔细一想,共享的秘钥如 ...

  7. RSA安全与秘钥基础设施

    之前写过一篇对称加密与攻击案例分析,而对于非对称加密,虽然接触的时间不短了,但一直没有很系统的记录过.因此趁着国庆家里蹲的五天长假,就来好好回顾总结一下. 前言 其实从加密的定语就能看出,对称加密表示 ...

  8. ras私钥c#转java_C#和JAVA的RSA密钥、公钥转换

    C#的秘钥跟JAVA的密钥区别 RSA对于程序本身是没有区别的,其格式都是相同的.对于不同的程序来说,存储使用的语法(包装的类)会有所不同. RSA语法和语法标准有很多,大的类型大概分为ASN.1.P ...

  9. SSH公钥原理(密钥,秘钥,私钥)(看了还是懵逼啊!)

    文章目录 1. 初见SSH 2. SSH工作原理 1. 基于口令的认证 2.基于公钥认证 3. SSH实践 4 总结 3. 为什么需要known_hosts? 1. 初见SSH SSH是一种协议标准, ...

最新文章

  1. C语言基本数据结构之四(线性,对分,二叉树查找及二叉树删除)
  2. 超级数学计算机,超级计算器+
  3. 聚类算法 sklearn k_means (返回一维数据的最优聚类)
  4. 100 个网络基础知识普及,看完成半个网络高手! 【厦门微思网络】
  5. 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
  6. 自己动手制作(DIY)一个Mini-Linux系统
  7. boost::multi_array模块测试 index_gen 的代码
  8. Ext js call方法
  9. 删除xenserver的iso库
  10. PHPCMS 模板标签
  11. 73 ----空间曲线的投影、投影柱面与投影曲线的方程、二元函数的等值线、等高线的性质
  12. [原]SyntaxError: invalid syntax 小问题
  13. Spark安装和编程实践(Spark2.4.0)
  14. 重症监护病人心电导联信号质量评估、SQI
  15. 高等代数第3版下 [丘维声 著] 2015年版_3折购书优惠码限时抢(人工智能类)
  16. Spring使用标签aop:aspectj-autoproxy 出的一些错
  17. SVG不能铺满的问题
  18. springcloud24:分布式事务 Seata处理分布式事务总结篇
  19. 有的人呀,他真的是带不动。。。
  20. 【LOJ6515】贪玩蓝月

热门文章

  1. 组播风暴引起的路由系统重启(LLMNR协议)
  2. 不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较
  3. Jmeter后置处理器之BeanShell
  4. ssbc 手撕包菜运行一段时间就停止的原因
  5. 通用能力——数量关系专项练习
  6. 帮我写一份关于快递取件的通知,内容是要求公司的门卫负责对到件的快递进行登记,而员工需要凭身份证登记取件,如果有快递丢失的情况,则对门卫进行罚款处罚...
  7. 目前市面各种加密狗原理介绍
  8. 容器化 hadoop 3.1.1Docker-Compose方式
  9. 源代码防泄密,SDC沙盒安全性如何?
  10. php 换行 html_总结html,css中的各种换行方法