【问题标题】:List only files that are unencrypted仅列出未加密的文件
【发布时间】:2012-03-02 13:18:39
【问题描述】:

首先,我无论如何都不是 Unix 专家,所以请原谅我的问题有点天真。

我需要列出给定目录中可能同时包含加密和未加密文件的未加密文件。

我无法仅通过文件扩展名可靠地识别这些文件,并希望 SO 社区中的某个人能够帮助我。

我可以跑:

file * | egrep -w 'text|XML'

但这只会识别文本或 XML 文件。如果我不能做得更好,我可能会使用它,因为目前目录中唯一的其他文件是文本或 XML 文件,但我真的想识别所有未加密的文件,无论它们是什么类型。

这可以在单行命令中实现吗?

编辑:加密文件通过 openSSL 加密

我用来解密文件的命令是:

openssl -d -aes128 -in <encrypted_filename> -out <unencrypted_filename>

【问题讨论】:

  • 如何判断文件是否加密?
  • 试试files * | grep -v 'encryted'
  • @kev 不幸的是,这不起作用,它仍然在结果中列出了 openSSL 加密文件。
  • 当我使用命令file x.enc时,它会打印出x.enc: data。所以你可以试试file * | grep -vw 'data'
  • @kev,如果我这样做,我会得到目录中的所有“数据”文件(包括加密和未加密),这不是我想要的,因此是问题所在。使用file 命令,我似乎无法区分加密文件和未加密文件。

标签: shell unix solaris sh


【解决方案1】:

您的问题并非小事。 solaris 文件命令使用“magic” - /etc/magic.这是一组试图尝试确定文件是什么风格的规则。它并不完美。

如果您阅读 /etc/magic 文件,请注意最后一列是文件命令的输出中的空话,当它识别某些内容时,文件中的某些结构。

基本上,file 命令查看文件的前几个字节,就像 exec() 系列系统调用所做的那样。因此,#/bin/sh 在文件的第一行,在该行的第一个字符中,向 exec() 标识 exec() 需要调用以“运行”文件的“命令解释器”。文件有相同的想法,并说“命令文本”“awk 文本”等。

你的问题是你必须弄清楚你将看到什么类型的文件作为文件的输出。您需要花时间深入研究未加密的文件,以查看您可以从文件中获得哪些“答案”。否则,您可以在整个目录树上运行 file 并整理出所有您认为正确的答案。

find /path/to/files -type f -exec file {} \; | nawk -F':' '!arr[$2]++'  > outputfile

这会为您提供一份关于您认为自己拥有什么文件的不同答案的列表。把你喜欢的放在一个文件里,命名为good.txt

find /path/to/files -type f -exec file {} \; > bigfile
nawk -F':' 'FILENAME=="good.txt" {arr$1]++}
          FILENAME=="bigfile" {if($2 in arr) {print $1}} ' good.txt bigfile > nonencryptedfiles.txt

这不是 100% 保证的。文件可以被愚弄。

【讨论】:

  • 感谢吉姆的回答。我将使用这样的东西,因为它应该可以满足我的需求,尽管我很欣赏它不是 100% 可靠的,因此必须在父系统中设置一些其他限制。
【解决方案2】:

识别加密文件的方法是通过随机数量或entropy,它们包含。加密的文件(或至少加密的文件很好)在统计意义上应该看起来是随机的。包含未加密信息(无论是文本、图形、二进制数据还是机器代码)的文件在统计上不是随机的。

计算随机性的标准方法是使用autocorrelation 函数。您可能只需要自动关联每个文件的前几百个字节,因此该过程可以相当快。

这是一种 hack,但您也许可以利用压缩算法的一个特性:它们通过消除数据中的随机性来工作。加密文件无法压缩(或者再次压缩,至少压缩不多),因此您可以尝试压缩每个文件的某些部分并比较压缩率。

SO 还有其他几个关于寻找随机性或熵的问题,其中许多都有很好的建议,比如这个: How can I determine the statistical randomness of a binary string?

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 2017-02-08
    • 1970-01-01
    • 2020-08-01
    • 2023-04-04
    • 2011-07-25
    相关资源
    最近更新 更多