我的任务:
我有一个编写文本文件的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编写这种格式? (假设公钥/私钥在密钥库中)
答案 0 :(得分:2)
这些文件是PKCS#7格式的签名文件。非常常见且几乎所有S / Mime工具链都可以创建这些。参见例如
http://www.cis.upenn.edu/~bcpierce/courses/629/jdkdocs/tooldocs/win32/javakey.html
并注意这可以用于任意文件。
Bouncy castle http://i-proving.com/2007/09/21/pkcs7-signatures-using-bouncy-castle/,Java implementation of C# SignedCms 和http://www.jensign.com/JavaScience/javacrypto/index.html就是一些例子。
更有限的版本,不需要额外的杂物:https://security.stackexchange.com/questions/13910/pkcs7-encoding-in-java-without-external-libs-like-bouncycastle-etc可能有用。
DW传递。
答案 1 :(得分:1)
以下命令可能有助于查看签名文件:
unzip -p {file}.jar META-INF/{signer}.RSA | \
openssl pkcs7 -text -print_certs -inform DER