0

我在服务器端有一个由 Java 生成的 RSA 私钥,我的客户端是一个 .net 应用程序,所以我需要将私钥转换为 .net 接受的格式。

这是我用java编写的服务器端代码:

 public String getRSAPrivateKeyAsNetFormat(byte[] encodedPrivkey) {
        try {
            StringBuffer buff = new StringBuffer(2048);    
            PKCS8EncodedKeySpec pvkKeySpec = new PKCS8EncodedKeySpec(encodedPrivkey);
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");                              
            RSAPrivateCrtKey pvkKey = (RSAPrivateCrtKey) keyFactory.generatePrivate(pvkKeySpec);
            buff.append("<RSAKeyValue>");   
            buff.append("<Modulus>" + b64encode(removeMSZero(pvkKey.getModulus().toByteArray())) + "</Modulus>");       
            buff.append("<Exponent>" + b64encode(removeMSZero(pvkKey.getPublicExponent().toByteArray())) + "</Exponent>");      
            buff.append("<P>" + b64encode(removeMSZero(pvkKey.getPrimeP().toByteArray())) + "</P>");   
            buff.append("<Q>" + b64encode(removeMSZero(pvkKey.getPrimeQ().toByteArray())) + "</Q>");    
            buff.append("<DP>" + b64encode(removeMSZero(pvkKey.getPrimeExponentP().toByteArray())) + "</DP>");
            buff.append("<DQ>" + b64encode(removeMSZero(pvkKey.getPrimeExponentQ().toByteArray())) + "</DQ>");
buff.append("<InverseQ>" + b64encode(removeMSZero(pvkKey.getCrtCoefficient().toByteArray())) + "</InverseQ>");    
            buff.append("<D>"+ b64encode(removeMSZero(pvkKey.getPrivateExponent().toByteArray())) + "</D>");
            buff.append("</RSAKeyValue>");    
            return buff.toString().replaceAll("[ \t\n\r]", "");
        } catch (Exception e) {
            System.out.println("324234234");
            System.err.println(e);
            return null;
        }
    }

在客户端使用私钥的代码是这样的,由.net编写

    using (var rsaProvider = new RSACryptoServiceProvider())
    {
       rsaProvider.FromXmlString(key);
    }

此代码适用于大多数用户,但 FromXmlString 方法会为一个用户抛出“错误数据”异常。我不知道为什么会发生,任何信息将不胜感激。非常感谢。

4

0 回答 0