如何对文件中的每一行进行 sha256 处理?

问题描述 投票:0回答:1

我使用的是 macOS Sierra,想要对文件中的每一行进行 sha256。

文件:

test
example
sample

预期输出:

9F86D081884C7D659A2FEAA0C55AD015A3BF4F1B2B0B822CD15D6C15B0F00A08
50D858E0985ECC7F60418AAF0CC5AB587F42C2570A884095A9E8CCACD0F6545C
AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF

我在Ubuntu上找到了一些方法来做到这一点,但Mac上似乎没有安装sha256。听起来,您必须使用类似于

shasum 256
的东西,但似乎没有任何效果。

macos hash command-line terminal command
1个回答
4
投票

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

### 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 ()
{
    python3 -c '
import sys, hashlib
for line in sys.stdin:
    print(hashlib.sha256(line.encode().rstrip(b"\n")).hexdigest().upper())'
}

无论哪种情况,用法都只是

hashlines < filename
hashlines <<< $'line one\nline two'

© www.soinside.com 2019 - 2024. All rights reserved.