如何轻松判断文件是否已加密

3
我接收到加密的数据文件,它们存储在一个目录中,通过夜间处理进行解密。
然后将解密后的文件加载。
我需要编写一个Java方法,返回一个包含目录中所有未加密文件的文件名的数组。
加密方法是openSSL(aes128)。
目前我尝试使用getType(),但它对于未加密的数据文件和加密的文件都返回content/unknown。
现在我正在查看每个文件的前两行并检查返回的字符以确定文件是否加密。
我需要知道的是,有没有更好的方法来完成这项任务?
如果这样做能使解决方案更容易,我也可以测试文件内容是XML还是纯文本,而不是测试文件是否加密。

哪个类有 getType 方法? - Freiheit
2
请阅读此处的答案:https://dev59.com/r0zSa4cB1Zd3GeqPmGPU - rosco
@Freiheit,http://www.extreme.indiana.edu/apis/wsdl4j/javax/wsdl/extensions/mime/MIMEContent.html - Ollie
2个回答

4
使用命名约定,使解密后的文件具有不同的扩展名,或将解密后的文件放在不同的目录中。
编辑:考虑到您提到的限制,我认为您必须按照问题中所建议的去做。这个http://www.dansdata.com/gz125.htm是一个有趣的指南,介绍了文件识别的问题。如果它适用于您特定的文件类型,您还可以使用unix命令file

我本来想用这种方式来解决问题,这也是我的最初方案。但不幸的是,由于不同的合作伙伴组织发送了不同的文件扩展名,再加上客户规定文件必须存放在指定目录下,这给我带来了人为的限制。 - Ollie
@artbristol,谢谢你的编辑。我原本打算使用基于Unix的解决方案,利用file命令并限制返回的文件为XML或纯文本文件。我希望能找到一个更优雅的Java解决方案,但正如你所建议的,Unix解决方案可能是最好的选择。还要感谢你提供的文件标识链接。 - Ollie

0

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

您计划检查XML是否可行,只需将其通过XML解析器即可。但是这仅告诉您文件是否为XML,而不是它是否已加密。

您如何区分明文和加密文件?它们都只是文本,不是吗?

您正在使用哪种AES实现?您使用哪些库?

这些加密文件只是加密的还是也进行了base64编码?这些文件如何存储在文件系统上?直接写入还是通过其他机制?

根据@rosco对问题的评论,是否有任何理由不能解密文件以检查它是否已加密?它们是非常大的文件吗?您的应用程序是解密它还是您只是一个中间人?是否存在任何安全约束会阻止您解密它?

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


纯文本可以通过其包含的字符与加密文本区分开来,加密文件具有许多非字母数字字符,我可以读取并推断出它很可能是加密的。加密使用的是openSSl aes128。不确定基础编码方式。所有文件都是通过SFTP客户端写入目录的。 - Ollie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接