如何在Mac OS X中的bash中创建md5哈希

时间:2012-01-25 01:28:20

标签: macos bash cryptography

如何使用bash为mac上的字符串创建md5哈希?我的环境中不存在md5sum。我为md5做了一个man,但我对它的真正含义感到困惑。

md5 "string"

不会返回哈希。

7 个答案:

答案 0 :(得分:82)

这应该有效 -

[jaypal:~/Temp] echo "this will be encrypted" | md5
72caf9daf910b5ef86796f74c20b7e0b

或者如果您更喜欢here string符号 -

[jaypal:~/Temp] md5 <<< 'this will be encrypted'
72caf9daf910b5ef86796f74c20b7e0b

更新

根据man页面,您可以使用以下任何选项

-s string
        Print a checksum of the given string.

-p      Echo stdin to stdout and append the checksum to stdout.

-q      Quiet mode - only the checksum is printed out.  Overrides the -r option.


[jaypal:~/Temp] md5 -s 'this will be encrypted'
MD5 ("this will be encrypted") = 502810f799de274ff7840a1549cd028a

[jaypal:~/Temp] md5 -qs 'this will be encrypted'
502810f799de274ff7840a1549cd028a

注意:MD5始终生成相同的哈希值。您发现输出与上面给出的示例不同的原因是由于注释中的一个点。前两个示例使用尾随newline字符来生成哈希。为避免这种情况,您可以使用:

[jaypal:~/Temp] echo -n "this will be encrypted" | md5
502810f799de274ff7840a1549cd028a

答案 1 :(得分:18)

实现你的要求:

md5 -s string

输出:MD5(&#34;字符串&#34;)= b45cffe084dd3d20d928bee85e7b0f21

答案 2 :(得分:15)

OSX使用md5,但大多数unices使用md5sum

以下是rvm的rvmrc验证代码的一部分,它找到了正确的md5二进制文件并将其包装。

__rvm_md5_for()
{
  if builtin command -v md5 > /dev/null; then
    echo "$1" | md5
  elif builtin command -v md5sum > /dev/null ; then
    echo "$1" | md5sum | awk '{print $1}'
  else
    rvm_error "Neither md5 nor md5sum were found in the PATH"
    return 1
  fi

  return 0
}

(来自https://github.com/wayneeseguin/rvm/blob/master/scripts/functions/rvmrc的代码)

答案 3 :(得分:1)

从命令行:

md5 <<< "String to hash"
8a0a39505c5753ff64a0377ab0265509

答案 4 :(得分:1)

所有其他答案均有效。我也想提出 openssl

➜ echo 'this will be hashed' | openssl md5
55be2dc2df2c1cc7bad72a0ecb338841

等同于以下内容

➜ echo 'this will be hashed' | openssl dgst -md5
# or
➜ openssl md5 <<< 'this will be hashed'
# or
➜ echo 'this will be hashed' | md5

答案 5 :(得分:0)

正确的做法是使用echo -n string | md5而不是echo "string" | md5。 (我正在使用zsh)

转换echo -n string | md5给定的md5哈希,您将得到string

md5 -s string也可以在这里指出。

λ [~] → echo "string" | md5
b80fa55b1234f1935cea559d9efbc39a

λ [~] → echo -n string | md5
b45cffe084dd3d20d928bee85e7b0f21

λ [~] → md5 -s string
MD5 ("string") = b45cffe084dd3d20d928bee85e7b0f21

答案 6 :(得分:-3)

您可能希望在此使用一些随机性,否则密码将始终相同。这应该有效:

dd if=/dev/random count=20|md5