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();
    }
}

java c# rsa

叫我兔子就好了 10 years, 2 months ago
和道一文字 answered 10 years, 2 months ago

Your Answer