【问题标题】:Bash script for decrypting all files inside folder用于解密文件夹内所有文件的 Bash 脚本
【发布时间】:2015-04-01 00:37:50
【问题描述】:

我正在使用 cygwin,我需要帮助创建一个 bash 脚本来解密文件夹内的所有文件。现在解密部分脚本应该检查文件名中的段号(文件名如 1_segment、2_segment 等)并生成该文件的十六进制值。现在解密如下。

openssl enc -aes-128-cbc -in 121_segment121_9_av.ts -out  test.ts -d -K 443CEB41F639B41CE29D1507647A3737 -iv 00000000000000000000000000000079

K 是每个文件都相同的键值 iv 是段号的十六进制值,每个文件都会改变。

请帮助我真的被困在这里。

问候 阿迪

【问题讨论】:

  • for 循环在 cygwin 中工作?我不明白“-iv”部分,它是否以某种方式从文件名派生?

标签: bash encryption openssl


【解决方案1】:
shopt -s globstar
for i in path/to/directory/**; do
    segmentNo=$(echo "${i##*/}" | grep -o "^[0-9]*")
    if [[ ! -f $i ]]; then
        continue
    elif [ "$segmentNo" == "" ]; then
        echo "File $i does not start with a segment no"
        continue
    fi
    hexVal=$(functionThatGeneratesHexFromInput "$segmentNo")
    openssl enc -aes-128-cbc -in "$i" -out  test.ts -d -K 443CEB41F639B41CE29D1507647A3737 -iv $hexVal
done

【讨论】:

  • 并将functionThatGeneratesHexFromInput 替换为用于从段号生成十六进制值的任何内容,将"$segmentNo" 传递给该函数。并将path/to/directory替换为这些文件的位置
  • for i in $(find ...) 是一个损坏的设计:如果文件名包含空格或全局字符或其他有趣的符号,它就会失败。不要使用这个。更好的是:去向向你展示这个技巧的人抱怨。
  • 有趣,告诉我更多。应该使用什么作为替代方案?
  • 明智的选择 1:你刚刚做了什么!完全使用 glob 而不是 find(但除非您 shopt -s dotglob,否则不会找到隐藏文件)。在您的编辑中,您应该明确地检查i 是一个带有[[ -f $i ]] 的文件(您之前的@​​987654330@ 命令有-type f)。顺便说一句,在这种情况下,您还应该使用shopt -s nullglob
  • 理智的替代品2:使用带有-exec标志的find。大多数情况下,如果您想坚持使用find,并且将所有内容打包到-exec 命令中并不太难,那么这是最好的做法。
猜你喜欢
  • 2015-11-02
  • 2014-11-04
  • 1970-01-01
  • 2021-06-23
  • 2016-02-25
  • 2020-06-28
  • 2017-02-01
  • 2019-08-05
  • 2020-09-29
相关资源
最近更新 更多