【问题标题】:What is the Java equilant of this C# method RSACryptoServiceProvider.ExportCspBlob()这个 C# 方法 RSACryptoServiceProvider.ExportCspBlob() 的 Java equilant 是什么
【发布时间】:2014-01-09 19:42:40
【问题描述】:

几年前,我们编写了一个供多个客户端使用的 C# 服务器应用程序。有些使用 C++,有些使用 c#,有些使用 python(它们都可以连接)。客户正在尝试使用 Java,但似乎无法使其正常工作。 问题在于 PublicKey 表示。

在 c# 中,我不发送原始的 byte [] publicKey,而是使用 RSACryptoServiceProvider.ExportCspBlob() 将其转换为 blob。所以在服务器应用程序中我只使用rsaCSP.ImportCspBlob(publicKeyBlob);

问题

如何使用 Java 创建一个 RSACryptoServiceProvider.ExportCspBlob() byte[] publicKey 表示

C# 服务器代码

public static bool VerifySignature(byte[] hash, byte[] signature, byte[] publicKeyBlob)
    {
        RSACryptoServiceProvider rsaCSP = new RSACryptoServiceProvider();
        try
        {
            rsaCSP.ImportCspBlob(publicKeyBlob);
            bool res = rsaCSP.VerifyHash(hash, CryptoConfig.MapNameToOID("SHA1"), signature);
            return res;
        }
        catch
        {

            return false;
        }
        finally
        {
            if (rsaCSP != null)
                rsaCSP = null;
        } 
    } 

有效的公钥的 C# 客户端代码

public static byte[] getPublicKeyBlob()
{
     RSACryptoServiceProvider rsaCspPublic = (RSACryptoServiceProvider)getCertificate()
                                                                .PublicKey.Key;
     return rsaCspPublic.ExportCspBlob(false);
}

Java 客户端代码 - 进行中(当前获取原始字节 [] 公钥

public static byte[] getPublicKeyBlob(){ 
    try
    {  
        byte[] ba = keystore.getCertificate("le-f0b649ee-4e25-4973-a185-efd5bd587c54")
                                 .getPublicKey().getEncoded();    
        return ba;

    }catch(Exception e){

    }
    return null;
}

如果有人能帮助我,将不胜感激。

【问题讨论】:

  • 你读过this answer吗?
  • 嗨,是的,我已经看到了。但是一旦我有了 PublicKeySpec,我如何将它转换为 byte[]? (导出CspBlob)
  • 也许最好问以下问题:RSACryptoServiceProvider.ExportCspBlob(false) 方法实际上是做什么的,这样我就可以编写java代码来做同样的事情。

标签: c# java security


【解决方案1】:

似乎这是这样做的方法(唯一的小问题是Java在服务器代码中添加了一个额外的00字节)

public static byte[] getPublicKey(){ 
    try
    {                
        RSAPublicKey key = (RSAPublicKey)keystore.getCertificate("alias").getPublicKey();    
        return key.getModulus().toByteArray();

    }catch(Exception e){

    }
    return null;
}

【讨论】:

    猜你喜欢
    • 2019-03-10
    • 2015-04-23
    • 2016-12-18
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多