将java.security“NONEwithRSA”签名转换为BouncyCastle轻量级API

时间:2014-02-19 09:28:29

标签: java cryptography rsa bouncycastle

我需要将Java应用程序转换为C#,因此需要从java.security API迁移到BouncyCastle轻量级API。

我的工作代码(java.security)如下所示:

private byte[] computeSignature(byte[] message, PrivateKey key) {
    Signature signature = Signature.getInstance("NONEwithRSA");
    signature.initSign(privateKey);
    signature.update(message);
    return signature.sign();
}

这是我的验证:

private void verifySignature(byte[] signature, byte[] message, PublicKey publicKey) {
    Signature signature = Signature.getInstance("NONEwithRSA");
    signature.initVerify(publicKey);
    signature.update(message);
    System.out.println(signer.verify(result) ? "OK" : "FAIL");
}

现在我正试图将它迁移到BC:

  1. NONEwithRSA算法不存在的问题(不确定如何添加)

    private byte[] computeSignature(byte[] message, AsymmetricKeyParameter key) {
        AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("NONEwithRSA");
        AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);
        ContentSigner signer = new BcRSAContentSignerBuilder(sigAlgId, digAlgId).build(key);
        signer.getOutputStream().write(Arrays.copyOf(message, message.length), 0, message.length);
        byte[] signature = signer.getSignature();
    }
    
  2. 没有提供良好的签名

    private byte[] computeSignature(byte[] message, AsymmetricKeyParameter privateKey) {
        Signer signer = new GenericSigner(new RSAEngine(), new NullDigest());
        signer.init(true, privateKey);
        signer.update(message, 0, message.length);
        return signer.generateSignature();
    }
    
  3. 你有什么建议吗?或者甚至可以将NONEwithRSA算法迁移到BC LW API?我假设我需要编写自己的签名者,但作为BC的新手和BC文档,我无法自己处理。

1 个答案:

答案 0 :(得分:1)

试试这个:

RSABlindedEngine engine = new RSABlindedEngine();
PKCS1Encoding paddedEngine = new PKCS1Encoding(engine);
paddedEngine.init(true, privateKey);
return paddedEngine.processBlock(message, 0, message.length);