我需要在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生成的签名