java - 如何在Java中正确使用RSASSA-PSS进行签名?

标签 java bouncycastle signature

我需要用java编写这个openssl-sign-instruction。

openssl dgst -sha256 -binary -out "signaturefile".sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -sign "privatekey".pem "file2sign"

此说明来自 Bundeszentralamt für Steuern (BZSt) - ELMA-File-Upload。

Bitte stellen Sie die Signaturerstellung daher auf RSASSA-PSS mit folgenden Parametern um:

Hashverfahren: SHA-256

Mask Generation Function: MGF1 mit SHA-256 Länge des Salts: 32 Byte Trailer Field: 0xBC

我已经尝试过不同的签名算法(使用和不使用 bouncycaSTLe),但没有得到与 openssl 相同的签名结果。

这就是我正在做的事情。

public class SignTest {

    public static void main(String[] args){
        Security.addProvider(new BouncyCastleProvider());

        Signature signatureSHA256Java = Signature.getInstance("SHA256withRSA/PSS");
        signatureSHA256Java.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));

        signatureSHA256Java.initSign(KeyManagerHelper.getPrivateKeyFromKeyStore("privatekey"));
        signatureSHA256Java.update(byteArray);
        byte[] signSHA256Java = signatureSHA256Java.sign();

        // after that I compare the Java-sign-bytearry with the openssl one
        System.out.println("signSHA256Java == signSHA256Openssl:\n" + Arrays.equals(signSHA256Java, signSHA256Openssl));
    }
}

最佳答案

我使用正确的算法编辑了我的问题,以使用 java bouncycaSTLe 创建签名。

Signature signatureSHA256Java = Signature.getInstance("SHA256withRSA/PSS");
signatureSHA256Java.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));

您可以像这样使用 openssl 验证 java 生成的签名

openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -verify "publickey".pem -signature "signaturefile".sig "file2sign"

关于java - 如何在Java中正确使用RSASSA-PSS进行签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728536/

相关文章:

java - 如果 JTree 可编辑,则不可多选

java - 未在 Java 中使用 ECDH KeyAgreement 生成正确的 AES key 大小

javascript - 使用 Ionic 制作签名绘图板

具有通用返回类的 Java 方法签名

key - rpm 安装错误 : Header V4 RSA/SHA1 signature: BAD, key ID

java - 将另一个类的面板实例添加到父面板

java - 自定义 AsyncUncaughtExceptionHandler

Java/Kotlin/Android - 格式化时间 (hh :mm:ss) and remove unnecessary zeros from the beginning

grails - 类 "org.bouncycaSTLe.asn1.ASN1Primitive"的签名者信息与同一包中其他类的签名者信息不匹配

c# - 快速创建 BouncyCaSTLe SecureRandom 实例是否有问题?