加密和数字签名可以只生成一个文件吗?

时间:2015-02-11 06:38:37

标签: java cryptography public-key-encryption

我正在尝试使用AES加密Java中的文件,然后对其进行数字签名并将其存储在数据库中,以便我可以验证签名,然后在获取该文件时对其进行解密。我已经阅读了Oracle关于数字签名的教程,但他们最终创建了3个文件,即:Data,Signature&公钥。我正在寻找一个解决方案,我只得到一个文件。有这样的解决方案吗?我是密码学的新手,因此无法收集有关它的更多信息。

3 个答案:

答案 0 :(得分:2)

这当然是可能的。如果您只是连接结果(可能由长度指示器继续保持它们的appart),那么您已经合成了这样一个blob,它可以存储在一个文件中。

那当然不是一个很好描述的结构。在密码学中,已经定义了这样做的结构。在为RNCrypt等库定义的许多结构之外,有两种众所周知的容器格式:CMS和PGP。最初为SMIME描述了CMS或加密消息语法,并且已经从RSA的PKCS#7标准发展而来。 OpenPGP由PGP和GPG等应用程序使用。

对于Java,Poun和CMS功能都由Bouncy Castle库提供。

答案 1 :(得分:0)

是:您可以简单地将生成的文件连接成一个(使用分隔符,以便您可以再次拆分它们)。 或者您可以将它们全部放在一个zip文件中,然后在处理之前将它们提取出来。

oops错过了数据库部分:在那里你可以将信息存储为ascii编码的varchar或直接将生成的文件读入BLOB

答案 2 :(得分:0)

这取决于您的情况,但如果所有以下内容属实,您只需要公钥签名。你想要:

  1. 在不同的地方运行多个版本的AES加密引擎
  2. 然后需要能够验证哪个服务器加密了哪些文件
  3. 同时在此次检查期间防止中间人攻击
  4. 这是一种非常罕见的情况,我建议您不需要公钥签名。

    通常,您只需附加HMAC“签名”即可对文件进行身份验证。我称之为签名,因为它是一种签名,因为它使用对称AES加密/解密密钥和加密文件内容来生成代码。这将保护文件的完整性,使其不被不知道加密/解密密钥的人修改。

    如果您使用AES加密文件,我建议您使用此免费open source file format。下载页面上有一个JAVA library available