java rsa加密

发布于 2022-08-29 20:16:52 字数 2677 浏览 7 评论 0

大神们好,我现在要用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();
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文