Java 在 openssl 中验证数字签名

Java verify digital signature in openssl

使用 this 教程,我创建了一个 Java 程序,可以使用 SHA256withRSA 算法对文档进行签名。在输出中我得到一个 public 密钥和一个签名文件。

我尝试用 openssl 验证我的文件,但我不能...我在网上搜索时发现我可能需要一个标准的 .pem 密钥,所以我的问题是:如何才能我将密钥转换为 pem 格式?或者我可以在 Java 中生成一个 .pem 密钥吗?如果是错误的方式,我该如何验证我的签名?

PEM 文件包含 public 密钥二进制数据,以 base64 编码并分成 64 个字符的行。该文件还有页眉 -----BEGIN PUBLIC KEY----- 和页脚 -----END PUBLIC KEY-----

Java 没有 PEM 的本地转换器,但您可以使用 bouncycastle

PEMWriter pemWriter = new PEMWriter(new FileWriter(file));
pemWriter.writeObject(publicKey);
pemWriter.flush();
pemWriter.close();

或者,您可以使用二进制密钥格式使用 openssl 验证签名

  -keyform DER

然后将您的public密钥内容保存在文件中

 byte publicKeyDer[] = publicKey.getEncoded()