java - 将java.security "NONEwithRSA"签名转换为BouncyCaSTLe轻量级API

标签 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();
    }
    

您有什么建议吗?或者甚至可以将 NONEwithRSA 算法迁移到 BC LW API 中吗?我认为我需要编写自己的 Signer,但作为 BC 的新手和 BC 文档,我无法独自处理这个问题。

最佳答案

试试这个:

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

关于java - 将java.security "NONEwithRSA"签名转换为BouncyCaSTLe轻量级API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21876156/

相关文章:

encryption - 使用 ColdFusion 对数据进行签名以进行单点登录

java:在列表中收集和组合数据

java - 需要帮助实现 CipherInputStream 和 CipherOutputStream

c - 使用 AES-128/CBC 时 EVP_DecryptFinal_ex 间歇性解密失败

iOS:将私钥添加到设备 KeyChain

java - 读取DER格式java的私钥

shell - 如何检查公共(public) RSA key 文件

Java Spring Boot SwaggerUI

java - 如何触发 MINA 客户端消息事件?

java - JLabel空指针异常