1

我的任务:

我有一个编写文本文件的 Java 应用程序。应用程序应使用 RSA/SHA1 对这些文件进行签名,以确保在传输期间或传输后不会更改它们。

我的第一个想法是在文本文件的末尾附加一个“ RSA 签名块”。但我没有发现有关如何格式化此块才能使用标准工具(OpenSSL?)验证文件的信息

在网上搜索了几个小时后,我觉得标准是编写一个附加.rsa 扩展名的文件。(假设我们有一个 Order123.txt 我们生成一个文件“Order123.txt.rsa”)但是我没有找到有关这些文件格式的信息。

我发现的唯一的东西是有.rsa文件的几个链接,它们可以用openssl打开,例如: http: //file.downloadatoz.com/rsa-file-extension.html

此外http://download.java.net/jdk8/docs/technotes/guides/jar/jar.html谈到“META-INF/*.RSA”文件:

数字签名是 .SF 签名文件的签名版本。这些是不打算由人类解释的二进制文件。

数字签名文件与 .SF 文件具有相同的文件名,但扩展名不同。扩展名取决于数字签名的类型。

.RSA(PKCS7 签名,SHA-256 + RSA)

所以它似乎是一种二进制格式......

有人可以解释RSA 文件的格式吗?也许如何最好用Java编写这种格式?(假设公钥/私钥在密钥库中)

4

2 回答 2

2

这些文件是 PKCS#7 格式的签名文件。非常常见,几乎所有 S/Mime 工具链都可以创建这些。参见例如

http://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/tooldocs/win32/javakey.html

请注意,这可以用于任意文件。

充气城堡http://i-proving.com/2007/09/21/pkcs7-signatures-using-bouncy-castle/C# SignedCms 的 Java 实现http://www.jensign.com/JavaScience/javacrypto/index .html是一些示例。

不需要额外杂项的更有限的版本:https ://security.stackexchange.com/questions/13910/pkcs7-encoding-in-java-without-external-libs-like-bouncycastle-etc可能有用。

德。

于 2012-09-03T15:57:27.613 回答
0

以下命令可能有助于查看签名文件:

unzip -p {file}.jar META-INF/{signer}.RSA | \
openssl pkcs7 -text -print_certs -inform DER
于 2013-04-02T09:17:06.977 回答