Fel*_*ich 5 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 参数:
Hashverfahren:SHA-256
掩码生成函数:MGF1 mit SHA-256 Länge des Salts:32 字节尾部字段: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));
}
}
Run Code Online (Sandbox Code Playgroud)
Fel*_*ich 10
我使用正确的算法编辑了我的问题,以使用 java bouncycastle 创建签名。
Signature signatureSHA256Java = Signature.getInstance("SHA256withRSA/PSS");
signatureSHA256Java.setParameter(new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, 1));
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用 openssl 验证 java 生成的签名
openssl dgst -sha256 -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -verify "publickey".pem -signature "signaturefile".sig "file2sign"
| 归档时间: |
|
| 查看次数: |
5230 次 |
| 最近记录: |