这可能是许多常见问题解答 - 而不是使用:
cat file | command
Run Code Online (Sandbox Code Playgroud)
(这被称为无用的猫),正确的方式应该是:
command < file
Run Code Online (Sandbox Code Playgroud)
在第二,"正确"的方式 - 操作系统不必产生额外的过程.
尽管知道这一点,我继续使用无用的猫有两个原因.
更美观 - 我喜欢数据仅从左到右均匀移动.而且它更容易更换cat别的东西(gzcat,echo,...),添加第二个文件或插入新的过滤器(pv,mbuffer,grep...).
我"觉得"在某些情况下可能会更快.更快,因为有2个进程,1st(cat)执行读取而第二个执行任何操作.它们可以并行运行,这意味着有时可以更快地执行.
我的逻辑是否正确(第二个原因)?
如果我从Mac调用命令
echo hello | shasum -a 256
Run Code Online (Sandbox Code Playgroud)
或者来自ubuntu
echo hello | sha256sum
Run Code Online (Sandbox Code Playgroud)
然后我得到以下结果
5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 -
Run Code Online (Sandbox Code Playgroud)
我注意到最后有冲刺.
但是当我使用Python hashlib或Java时java.security.MessageDigest,它们会给我相同的结果如下:
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Run Code Online (Sandbox Code Playgroud)
所以,有人能指出我错在哪里吗?
谢谢.
蟒蛇:
>>> import hashlib
>>> hashlib.sha256("hello").hexdigest()
Run Code Online (Sandbox Code Playgroud)
Java的:
MessageDigest md = MessageDigest.getInstance("SHA-256");
String text = "hello";
md.update(text.getBytes("UTF-8"));
byte[] digest = md.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < digest.length; i++) {
sb.append(String.format("%02x", digest[i] & 0xFF))
}
System.out.println(sb.toString());
Run Code Online (Sandbox Code Playgroud) 当我“sha256”时,Erlang 返回的结果与 bash 命令不同。
echo a | sha256sum, returns: 87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7 -
Run Code Online (Sandbox Code Playgroud)
埃尔兰
Bin = crypto:hash(sha256, "a").
<<202,151,129,18,202,27,189,202,250,194,49,179,154,35,220,
77,167,134,239,248,20,124,78,114,185,128,119,133,175,
238,72,187>>
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的二进制到十六进制, 但没有一个给出我期望的结果。
我得到这个结果:
bin_to_hex:bin_to_hex(Bin).
<<"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB">>
Run Code Online (Sandbox Code Playgroud) cryptography ×2
sha256 ×2
cat ×1
command-line ×1
elixir ×1
erlang ×1
erlang-otp ×1
hash ×1
python ×1
shell ×1