有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java JCA AES加密,检测消息是否被篡改

我试图弄明白如何编写一个简单的Java类来使用AES加密和解密纯文本文件,但它必须能够判断是否有人编辑了一个文件,并通过使用签名在该类之外对其进行了加密。如果签名不匹配,则文件将被删除

我看了一下Message Digest,并考虑了在另一个文件中存储校验和,但我想得到一些建议。我们有没有什么方法可以轻松实现这一点。Java类需要一个函数来遍历文件夹,查看文件是否被篡改


共 (1) 个答案

  1. # 1 楼答案

    你想要的是authenticated encryption (aka AEAD)。实现这一点的一个非常常见的方法是在伽罗瓦计数器模式(GCM)中使用AES。请记住,当正确使用时,这种模式提供了极大的安全性和效率,但当使用稍微不正确时,所有这些好处都会很快消失。例如,如果你在不同的明文中重复使用IV,你几乎会失去所有的安全保证。如果我使用的术语对您来说是陌生的,并且您试图保护的数据非常敏感,我高度建议您雇佣一位熟悉该领域的人来为您做这件事。如果你仍然想自己做这件事,你需要首先弄清楚以下几点:

    1. 您将如何生成AES密钥?熵的来源很重要,并且需要适合您希望保护的数据的敏感性

    2. 你将如何储存你的钥匙?它们将位于本地机器上基于软件的密钥库中,还是位于某种防篡改硬件(例如HSM)中?如果它们只受软件保护,您将如何保护密码短语

    3. 您将如何存储密文、IV、身份验证标签和相关数据?您会使用预定义的格式(如CMS)还是自定义的自制格式

    4. 除了要修改的文件外,您是否需要测试文件是否已从目录中删除和/或复制

    5. 您想要什么长度的身份验证标签

    我不确定你的文件有多大,所以我不知道你是想把整个文件读入内存,然后执行加密还是使用输入/输出流方法。如果你让我知道更多细节,我可以向你指出一些更好的资源