我需要在Java中对此openssl-sign-instruction进行编码。



该指令来自BundeszentralamtfürSteuern(BZSt)-ELMA文件上传。



我已经尝试了不同的签名算法(使用和不使用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生成的签名

10-07 16:18