【问题标题】:Can encryption and Digital signatures produce exactly one file?加密和数字签名可以生成一个文件吗?
【发布时间】:2015-02-11 06:38:37
【问题描述】:

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

【问题讨论】:

    标签: java cryptography public-key-encryption


    【解决方案1】:

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

    这当然不是一个很好描述的结构。在密码学中,已经定义了执行此操作的结构。除了为 RNCrypt 等库定义的许多结构之外,还有两种众所周知的容器格式:CMS 和 PGP。 CMS 或 Cryptographic Message Syntax 最初是为 SMIME 描述的,并且是从 RSA 的 PKCS#7 标准演变而来的。 OpenPGP 被 PGP 和 GPG 等应用程序使用。

    对于 Java,PGP 和 CMS 功能均由 Bouncy Castle 库提供。

    【讨论】:

      【解决方案2】:

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

      1. 在不同的地方运行多个版本的 AES 加密引擎
      2. 然后需要能够验证哪个服务器加密了哪些文件
      3. 在此检查期间防止中间人攻击

      这是一种非常罕见的情况,我建议您实际上不需要公钥签名。

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

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

      【讨论】:

        【解决方案3】:

        是的:您可以简单地将生成的文件合并为一个(使用分隔符,以便您可以再次拆分它们)。 或者您可以将它们全部放在一个 zip 文件中,然后在处理之前将它们解压缩。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-27
          • 2011-07-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多