java rsa加密
大神们好,我现在要用java连接.net下的一个web service,由于要对数据加密,所以使用了rsa加密方法;但是.net和java下面的rsa加密公钥个私钥格式都不一样,所以就产生了一个格式转换的问题;.net下的公钥格式为xml的
问题:
现在要把java生成的公钥传给.net,然后.net端用这个公钥进行加密,加密后的数据返回给java,java对这个数据用私钥解密;
ps:现在从.net传一个xml格式的公钥,java端进行解析xml,生成java格式的公钥,然后对其加密,加密后的数据传给了.net端,而.net端能够使用私钥解密。但是就如问题所说的,反过来在java端解密的时候一直报错;
我根据.net端的xml格式公钥生成java端的公钥的代码如下:
public static RSAPublicKey getPublicKey(String modulus, String exponent) {
try {
System.out.println(modulus);
byte[] modulusI = decryptBASE64(modulus);
byte[] expI = decryptBASE64(exponent);
BigInteger b1 = new BigInteger(modulusI);
BigInteger b2 = new BigInteger(expI);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(b1, b2);
RSAPublicKey publickey =(RSAPublicKey) keyFactory.generatePublic(keySpec);
return publickey;
} catch (Exception e) {
e.printStackTrace();
return null;
}
根据java端的公钥生成.net端格式的公钥的代码如下:
static {
try {
KeyPairGenerator keyPairGen = KeyPairGenerator
.getInstance(ALGORITHM);
keyPairGen.initialize(512);
KeyPair keyPair = keyPairGen.generateKeyPair();
// 公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
// 私钥
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
String modulus = encryptBASE64(privateKey.getModulus()
.toByteArray());
String exponent = encryptBASE64(privateKey.getPrivateExponent()
.toByteArray());
String modulusP = encryptBASE64(publicKey.getModulus()
.toByteArray());
String exponentP = encryptBASE64(publicKey.getPublicExponent()
.toByteArray());
m_default_privateKey = ("<RSAKeyValue><Modulus>" + modulus
+ "</Modulus>" + "<Exponent>" + exponent
+ "</Exponent></RSAKeyValue>").replace("\r\n", "");
m_default_publicKey = ("<RSAKeyValue><Modulus>" + modulusP
+ "</Modulus>" + "<Exponent>" + exponentP
+ "</Exponent></RSAKeyValue>").replace("\r\n", "");
default_privateKeyC = encryptBASE64(privateKey.getEncoded());
default_publicKeyC = encryptBASE64(publicKey.getEncoded());// (
} catch (Exception ex) {
ex.printStackTrace();
}
}