【发布时间】: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代码来做同样的事情。