【问题标题】:How to hash a string without adding a trailing '\n' to it?如何在不添加尾随 '\n' 的情况下对字符串进行哈希处理?
【发布时间】:2016-04-25 12:04:06
【问题描述】:

我正在尝试在 python 和 shell(OSX 上的 zsh)中使用 md5。

我明白了:

在 python 中:

>>> hashlib.md5("zoo".encode('utf-8')).hexdigest()
'd2cbe65f53da8607e64173c1a83394fe'

使用 Zsh:

$ echo "zoo" | md5
ace34ff0a763d9f382cbe6b219fcac7c

因为我也有:

>>> hashlib.md5("zoo\n".encode('utf-8')).hexdigest()
'ace34ff0a763d9f382cbe6b219fcac7c'

在 Python 中,我认为我的 zsh 命令会在对字符串进行散列之前添加一个(不需要的)尾随 '\n'。

为什么会发生这种情况,我该如何避免这种情况?

【问题讨论】:

    标签: macos shell md5 zsh


    【解决方案1】:

    给你:

    kent$  echo -n 'zoo'|md5sum
    d2cbe65f53da8607e64173c1a83394fe
    
    kent$  echo  'zoo'|md5sum 
    ace34ff0a763d9f382cbe6b219fcac7c 
    

    【讨论】:

    • 所以这更像是echo 问题而不是md5 问题。我不知道-n 标志,谢谢你的信息!虽然我的操作系统上没有 md5sum,但它并没有真正改变 md5 的任何内容。
    • @vmonteco 我这里没有 md5.. ^_*.. 我认为你不应该让 md5 命令/函数来处理字符串,它只是用 计算 md5 摘要给定 字符串。字符串是否包含换行符,由你决定:输入命令
    • 这是有道理的。 :) 了解这两种解决方案仍然很有用!感谢您的帮助。
    【解决方案2】:

    我刚刚发现:

    md5 命令有一个-s 标志,允许将参数直接作为字符串传递。

    所以:

    $ md5 -s "zoo"
    MD5 ("zoo") = d2cbe65f53da8607e64173c1a83394fe
    

    相当愚蠢,我的错。

    【讨论】:

      猜你喜欢
      • 2011-04-25
      • 1970-01-01
      • 2021-09-19
      • 2018-11-08
      • 2011-08-24
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2017-01-15
      相关资源
      最近更新 更多