62,046
社区成员
发帖
与我相关
我的任务
分享
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;
}
}
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")); // 将解密数据转为字符串