【问题标题】:Encrypt file with AES-256 and Decrypt file to its original format使用 AES-256 加密文件并将文件解密为其原始格式
【发布时间】:2015-05-06 07:34:11
【问题描述】:

我必须建立一个项目来加密和解密 AES-256 中的文件。 所以,我必须加密文件,这些文件可以是任何格式,如文本文件、图像文件、视频文件或任何格式的文件, 并且必须加密这些文件并将它们存储在具有不同格式的设备上,例如 *.anuj(扩展名)。

假设我加密文件并制作了具有自定义扩展名的新文件。 在解密该文件时,我应该如何知道原始文件是文本文件或图像或任何其他格式。

我的问题是 1. 我是否需要在以自定义格式保存加密文件时添加额外的字符,例如图像 (abcd_img.anuj)、文本 (abcd_txt.anuj)。 在解密的时候,我可以从那个额外的嵌入字符中得到原始文件格式,图像是 img,文本是 txt。这样我就可以解密为该文件格式。

但这是一个庞大的过程,因为有多种格式。甚至图像也有多种格式(.gif、.png、.jpg 等)。

在开始这个项目之前我应该​​选择什么方法?

【问题讨论】:

    标签: android encryption cryptography aes filenames


    【解决方案1】:

    如果您正在处理文件,那么在解密后重新创建该文件可能需要的唯一信息就是文件名和文件扩展名。

    执行此操作的一种方法是,当您加密的文件是“name.ext”时,只需按原样加密文件,无需特殊文件格式“name.ext.anuj”。它包含重新创建原始文件的所有内容。

    这样做的问题是显示了文件名。有时,攻击者只需要文件名等元数据。想想你的配偶什么时候发现了一个文件“divorce.odf.anuj”。

    在这些情况下,您可以定义新的文件格式。例如,您可以获取文件名,将其写入流(可能在其前面加上DataOutputStream 提供的文件名长度),然后将实际文件内容写入byte[]。现在,您可以加密整个内容。解密时,只需从前面读取文件名,然后将剩余的解密字节写入此文件。

    【讨论】:

    • 在此应用程序中添加自定义文件扩展名是必要的。这是要求。我的文件可以是任何文件,如果我通过邮件将其发送到其他设备。用户只能在我的应用程序中打开该文件。因为我的应用程序知道那个自定义扩展。在那里我必须找到最初的文件,以便我可以将其解密为原始文件。
    • 是的,我就是这么说的。您将使用自定义扩展名来表示加密文件。
    • 感谢您的回答,我想再问一个问题,Android 操作系统应该如何知道具有自定义扩展名的加密文件必须在特定应用程序中打开,现在操作系统说“无法找到应用程序来执行此操作”。我是否需要在清单中提供任何许可或什么让操作系统知道对于这个扩展我必须打开这个特定的应用程序。
    • 我不知道android如何处理自定义文件扩展名。
    猜你喜欢
    • 2020-01-20
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多