java私钥解密代码,.Net如何重写? 私钥解密.Net重写java方法 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 byte[] msg = "中国人民解放军".getBytes("UTF-8"); // 用证书的公钥加密 CertificateFactory cff = CertificateFactory.getInstance("X.509"); FileInputStream fis1 = new FileInputStream( "E://TestKey2.cer"); // 证书文件 java.security.cert.Certificate cf = cff.generateCertificate(fis1); PublicKey pk1 = cf.getPublicKey(); // 得到证书文件携带的公钥 Cipher c1 = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // 定义算法:RSA c1.init(Cipher.ENCRYPT_MODE, pk1); byte[] msg1 = c1.doFinal(msg); // 加密后的数据 // 用证书的私钥解密 - 该私钥存在生成该证书的密钥库中 FileInputStream fis2 = new FileInputStream( "E://TestStore"); KeyStore ks = KeyStore.getInstance("JKS"); // 加载证书库 char[] kspwd = "000000".toCharArray(); // 证书库密码 char[] keypwd = "000000".toCharArray(); // 证书密码 ks.load(fis2, kspwd); // 加载证书 PrivateKey pk2 = (PrivateKey) ks.getKey("TestKey2", keypwd); // 获取证书私钥 fis2.close(); Cipher c2 = Cipher.getInstance("RSA/ECB/PKCS1Padding"); c2.init(Cipher.DECRYPT_MODE, pk2); byte[] msg2 = c2.doFinal(msg1); // 解密后的数据 System.out.println(new String(msg2, "UTF8")); // 将解密数据转为字符串 RSA这么重要的算法哪个语言都有实现代码的,网上一大堆,关键还是怎么把密钥转成 .NET 格式,如下: private static String getRSAPrivateKeyAsNetFormat(byte[] encodedPrivkey) { try { StringBuffer buff = new StringBuffer(1024); PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec( encodedPrivkey); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory .generatePrivate(pvkKeySpec); buff.append("<RSAKeyValue>"); buff.append("<Modulus>" + Base64.encode(removeMSZero(pvkKey.getModulus() .toByteArray())) + "</Modulus>"); buff.append("<Exponent>" + Base64.encode(removeMSZero(pvkKey.getPublicExponent() .toByteArray())) + "</Exponent>"); buff.append("<P>" + Base64.encode(removeMSZero(pvkKey.getPrimeP() .toByteArray())) + "</P>"); buff.append("<Q>" + Base64.encode(removeMSZero(pvkKey.getPrimeQ() .toByteArray())) + "</Q>"); buff.append("<DP>" + Base64.encode(removeMSZero(pvkKey.getPrimeExponentP() .toByteArray())) + "</DP>"); buff.append("<DQ>" + Base64.encode(removeMSZero(pvkKey.getPrimeExponentQ() .toByteArray())) + "</DQ>"); buff.append("<InverseQ>" + Base64.encode(removeMSZero(pvkKey.getCrtCoefficient() .toByteArray())) + "</InverseQ>"); buff.append("<D>" + Base64.encode(removeMSZero(pvkKey.getPrivateExponent() .toByteArray())) + "</D>"); buff.append("</RSAKeyValue>"); return buff.toString().replaceAll("[ \t\n\r]", ""); } catch (Exception e) { System.err.println(e); return null; } } private static String getRSAPublicKeyAsNetFormat(byte[] encodedPrivkey) { try { StringBuffer buff = new StringBuffer(2048); X509EncodedKeySpec pvkKeySpec = new X509EncodedKeySpec( encodedPrivkey); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); // RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory // .generatePrivate(pvkKeySpec); RSAPublicKey pvkKey = (RSAPublicKey) keyFactory .generatePublic(pvkKeySpec); buff.append("<RSAKeyValue>"); buff.append("<Modulus>" + Base64.encode(removeMSZero(pvkKey.getModulus() .toByteArray())) + "</Modulus>"); buff.append("<Exponent>" + Base64.encode(removeMSZero(pvkKey.getPublicExponent() .toByteArray())) + "</Exponent>"); buff.append("</RSAKeyValue>"); return buff.toString().replaceAll("[ \t\n\r]", ""); } catch (Exception e) { System.err.println(e); return null; } } 你可能理解错了, 不是要把密匙转成.Net 。只是要用.Net解密而已。也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。 只要解密看这个http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsacryptoserviceprovider.aspx 只要解密看这个http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsacryptoserviceprovider.aspx嗯 谢谢, 已经找到了, 另外就是问一下 这边有人用java做了一个文件,没有文件类型,让读取里面的私钥。具体的读取方式在上面已经贴出来了源码。我这边需要用私钥解密,但是得不到私钥。 麻烦给看一下这块java 代码怎么能改成net的。 你可能理解错了, 不是要把密匙转成.Net 。只是要用.Net解密而已。也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。解密之前难道不要把密钥转成 .NET 的吗, 不然怎么用 .NET 解密. 你可能理解错了, 不是要把密匙转成.Net 。只是要用.Net解密而已。也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。解密之前难道不要把密钥转成 .NET 的吗, 不然怎么用 .NET 解密.你的意思是需要java设置私钥的时候设置为.net之后才可以使用.net解密吗? JS未定义的问题 怎么在aspx页面上获取虚拟路径~~急救!!! 未定义构造函数 仿csdn头像层隐藏显示 很难的视频问题 GDI+ 中发生一般性错误 简单的问题,如何给模板列绑定值 如何在Page_Load函数中设置asp.net页面的Title属性? 对于 SELECT INTO 语句,请确保每列均具有名称的问题 求教高人关于正则表达式的问题 求个会用Nhibernate的大神指导指导 WCF https 证书验证
byte[] msg = "中国人民解放军".getBytes("UTF-8");
// 用证书的公钥加密
CertificateFactory cff = CertificateFactory.getInstance("X.509");
FileInputStream fis1 = new FileInputStream(
"E://TestKey2.cer"); // 证书文件
java.security.cert.Certificate cf = cff.generateCertificate(fis1);
PublicKey pk1 = cf.getPublicKey(); // 得到证书文件携带的公钥
Cipher c1 = Cipher.getInstance("RSA/ECB/PKCS1Padding"); // 定义算法:RSA
c1.init(Cipher.ENCRYPT_MODE, pk1);
byte[] msg1 = c1.doFinal(msg); // 加密后的数据 // 用证书的私钥解密 - 该私钥存在生成该证书的密钥库中
FileInputStream fis2 = new FileInputStream(
"E://TestStore");
KeyStore ks = KeyStore.getInstance("JKS"); // 加载证书库
char[] kspwd = "000000".toCharArray(); // 证书库密码
char[] keypwd = "000000".toCharArray(); // 证书密码
ks.load(fis2, kspwd); // 加载证书
PrivateKey pk2 = (PrivateKey) ks.getKey("TestKey2", keypwd); // 获取证书私钥
fis2.close();
Cipher c2 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
c2.init(Cipher.DECRYPT_MODE, pk2);
byte[] msg2 = c2.doFinal(msg1); // 解密后的数据 System.out.println(new String(msg2, "UTF8")); // 将解密数据转为字符串
try {
StringBuffer buff = new StringBuffer(1024); PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(
encodedPrivkey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory
.generatePrivate(pvkKeySpec); buff.append("<RSAKeyValue>");
buff.append("<Modulus>"
+ Base64.encode(removeMSZero(pvkKey.getModulus()
.toByteArray())) + "</Modulus>"); buff.append("<Exponent>"
+ Base64.encode(removeMSZero(pvkKey.getPublicExponent()
.toByteArray())) + "</Exponent>"); buff.append("<P>"
+ Base64.encode(removeMSZero(pvkKey.getPrimeP()
.toByteArray())) + "</P>"); buff.append("<Q>"
+ Base64.encode(removeMSZero(pvkKey.getPrimeQ()
.toByteArray())) + "</Q>"); buff.append("<DP>"
+ Base64.encode(removeMSZero(pvkKey.getPrimeExponentP()
.toByteArray())) + "</DP>"); buff.append("<DQ>"
+ Base64.encode(removeMSZero(pvkKey.getPrimeExponentQ()
.toByteArray())) + "</DQ>"); buff.append("<InverseQ>"
+ Base64.encode(removeMSZero(pvkKey.getCrtCoefficient()
.toByteArray())) + "</InverseQ>"); buff.append("<D>"
+ Base64.encode(removeMSZero(pvkKey.getPrivateExponent()
.toByteArray())) + "</D>");
buff.append("</RSAKeyValue>"); return buff.toString().replaceAll("[ \t\n\r]", "");
} catch (Exception e) {
System.err.println(e);
return null;
}
} private static String getRSAPublicKeyAsNetFormat(byte[] encodedPrivkey) {
try {
StringBuffer buff = new StringBuffer(2048); X509EncodedKeySpec pvkKeySpec = new X509EncodedKeySpec(
encodedPrivkey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory
// .generatePrivate(pvkKeySpec);
RSAPublicKey pvkKey = (RSAPublicKey) keyFactory
.generatePublic(pvkKeySpec);
buff.append("<RSAKeyValue>");
buff.append("<Modulus>"
+ Base64.encode(removeMSZero(pvkKey.getModulus()
.toByteArray())) + "</Modulus>");
buff.append("<Exponent>"
+ Base64.encode(removeMSZero(pvkKey.getPublicExponent()
.toByteArray())) + "</Exponent>");
buff.append("</RSAKeyValue>");
return buff.toString().replaceAll("[ \t\n\r]", "");
} catch (Exception e) {
System.err.println(e);
return null;
}
}
也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。
http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsacryptoserviceprovider.aspx
http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.rsacryptoserviceprovider.aspx嗯 谢谢, 已经找到了, 另外就是问一下 这边有人用java做了一个文件,没有文件类型,让读取里面的私钥。
具体的读取方式在上面已经贴出来了源码。
我这边需要用私钥解密,但是得不到私钥。
也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。解密之前难道不要把密钥转成 .NET 的吗, 不然怎么用 .NET 解密.
也就是接收到byte的参数然后通过程序解密 只是这个过程,我不太清楚.net是要如何解密。解密之前难道不要把密钥转成 .NET 的吗, 不然怎么用 .NET 解密.
你的意思是需要java设置私钥的时候设置为.net之后才可以使用.net解密吗?