小编Jas*_*n X的帖子

使用 SpongyCastle 验证 ECDSA 签名

我正在尝试使用 SpongyCastle 在 Android 上验证 ECDSA 数字签名。我有一个X509Certificate包含我需要用来验证它的公钥,但我无法弄清楚如何获得PublicKey(向下转换ECPublicKey)以用于ECDSASigner该类。

我已经使用 C# 版本的 BouncyCastle 完成了这个,它看起来像这样:

ECDsaSigner signer = new ECDsaSigner();
signer.Init(false, cert.GetPubliKey());
Run Code Online (Sandbox Code Playgroud)

在 API 的 Java 版本中,该X509Certificate.getPublicKey()方法返回一个PublicKey类而不是AsymmetricKeyParameter. 但是,该ECDSASigner.init()方法需要一个CipherParameters对象。我不知道如何为 ECDSA 做到这一点。

对于 RSA 签名,我只是手动重建了一个新RSAKeyParameters对象:

RSAEngine engine = new RSAEngine();
engine.init(
    false,
    new RSAKeyParameters(
        false,
        ((RSAPublicKey) pubKey).getModulus(),
        ((RSAPublicKey) pubKey).getPublicExponent()
    )
);
Run Code Online (Sandbox Code Playgroud)

这似乎并不理想,但我认为它应该有效。但我什至不知道如何为 ECDSA 做这个等价物。我认为有更好的方法可以做到这一点,但我无法找出要使用的正确 API。

java android bouncycastle spongycastle

0
推荐指数
1
解决办法
1891
查看次数

标签 统计

android ×1

bouncycastle ×1

java ×1

spongycastle ×1