如何sha256文件中的每一行?

时间:2017-12-06 15:48:25

标签: macos hash command-line terminal command

我正在使用macOS Sierra,并希望sha256文件中的每一行。

文件:

test
example
sample

预期输出:

9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
50D858E0985ECC7F60418AAF0CC5AB587F42C2570A884095A9E8CCACD0F6545C
AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF

我在Ubuntu上找到了一些方法,但Mac上似乎没有安装sha256。听起来,你必须使用与shasum 256类似的东西,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:2)

openssl dgst可以在MacOS上开箱即用(几乎在其他任何地方都可以使用),并且可以轻松地与BashFAQ #1实践结合使用,逐行迭代:< / p>

### INEFFICIENT SOLUTION
hashlines() {
  while IFS= read -r line; do
    printf '%s' "$line" \
      | openssl dgst -sha256 \
      | tr '[[:lower:]]' '[[:upper:]]' \
      | sed -Ee 's/.*=[[:space:]]//'
  done
}

也就是说,在大文件上运行时效率非常低。如果你需要表现良好的东西,我会用Python写这个。包含在相同的shell函数中,具有相同的调用约定,可能如下所示:

### FAST SOLUTION
hashlines() {
  python -c '
import sys, hashlib
for line in sys.stdin:
    print(hashlib.sha256(line.rstrip("\n")).hexdigest().upper())'
}

在任何一种情况下,使用情况只是hashlines < filenamehashlines <<< $'line one\nline two'