如何编写包含签名的.RSA文件(使用java)

时间:2012-09-03 15:22:17

标签: java openssl rsa digital-signature file-format

我的任务:

我有一个编写文本文件的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编写这种格式? (假设公钥/私钥在密钥库中)

2 个答案:

答案 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# SignedCmshttp://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