【问题标题】:How can I tell easily if a file is encrypted如何轻松判断文件是否已加密
【发布时间】:2012-03-05 14:56:17
【问题描述】:

我将加密的数据文件接收到一个通过夜间进程未加密的目录中。
然后加载未加密的文件。

我需要编写一个 Java 方法来返回一个数组,该数组包含目录中所有未加密文件的文件名。

加密方式为openSSL(aes128)。

到目前为止,我已经尝试过getType(),但对于未加密的数据文件和加密的文件,它都会返回content/unknown

我现在正在研究读取每个文件的前两行并检查返回的字符以查看文件是否已加密。
我需要知道的是,有没有更好的方法来做到这一点?

我还可以测试文件内容是 XML 还是纯文本,而不是测试文件是否加密,如果这样可以使解决方案更容易?

【问题讨论】:

标签: java encryption


【解决方案1】:

使用命名约定,使解密后的文件具有不同的扩展名,或者将解密后的文件放在不同的目录中。

编辑:鉴于您提到的限制,我认为您必须按照问题中的建议进行操作。这个http://www.dansdata.com/gz125.htm 是一个有趣的文件识别问题指南。如果它适用于您的特定文件类型,您也可以使用 file unix 命令。

【讨论】:

  • 我本来希望这样做,这是我最初的解决方案,不幸的是,我受到发送不同文件扩展名的不同合作伙伴组织的限制,并且指定文件的客户对我施加了另一个人为限制必须驻留在指定的目录中。
  • @artbristol,感谢您的编辑。我最初打算围绕file 命令使用基于Unix 的解决方案,并将返回的内容限制为XML 或纯文本文件。我希望有一个更优雅的 Java 解决方案,但正如您所建议的,Unix 解决方案可能是最好的。也感谢您提供文件标识链接。
【解决方案2】:

我无法对 AES 发表评论,但有几个加密标准(想到 PGP)允许使用公共标头或具有公共属性(如签名块或公钥)。

您检查 XML 的计划会很好,只需通过 XML 解析器提供它。但是,这只会告诉您文件是否为 XML,而不会告诉您是否已加密。

您如何区分纯文本和加密文件?不是全部都是文字吗?

您使用的是什么 aes 实现?您使用的是哪些库?

加密的文件是刚刚加密的,还是它们也是 base64 编码的?这些文件如何存储在文件系统中?是直接写的还是通过其他机制写的?

根据@rosco 对问题的评论,是否有任何理由无法解密文件以检查它是否已加密?它们是非常大的文件吗?你的应用程序是解密它的那个,还是你只是一个中间人?是否有任何安全限制会阻止您对其进行解密?

您能否制定业务规则?例如,声明如果未加密提交将被拒绝?

【讨论】:

  • 纯文本可以通过其包含的字符与加密文本区分开来,加密文件有许多非字母数字字符,我可以读取和推断它很可能是加密的。加密是openSSl aes128。不确定基本编码。通过 SFTP 客户端写入目录的所有文件。
猜你喜欢
  • 2011-05-09
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多