【问题标题】:Bash: Compare a partial hash of a variable to a fixed stringBash:将变量的部分哈希与固定字符串进行比较
【发布时间】:2020-07-26 11:21:34
【问题描述】:

我有一个环境变量 %foo。

我想在一个 linux bash 脚本中:

  • 创建一个 bcrypt(或 sha256 或 md5sum,它只是关于健全性测试)
  • 修剪到哈希的前两个字符
  • 将它们与已知输出(硬编码字符串)进行比较
  • 警告,如果不匹配

我只是太笨了,无法正确链接,但大致是这样的:

...
if [ 'a0' != ${ $foo | bcrypt | awk '$1:0:2'} ]
  echo "Warn: typo in password?"
fi

本质上,它是一种冒烟测试(与完整的哈希相比,披露过多)。 (我知道,启示仍然会降低安全性/将暴力破解降低大约 30² 或 250² 倍左右)

【问题讨论】:

    标签: linux string bash


    【解决方案1】:

    您需要在管道的开头添加“echo -n”,并在 awk 中使用 substr。注意 '-n' 是必需的,否则哈希将包含一个尾随的新行。

    if [[ 'a0' != $( printf "%s" "$foo" | md5sum | awk '{ print substr($0, 0, 2) }' ) ]] ; then
      echo "Warn: typo in password?"
    fi
    

    替代,用bash代替awk,用'here-string',可以写

    hh=$(md5sum <<< "$foo")
    if [[ 'a0' != ${hh:0:2} ]] ; then
      echo "Warn: typo in password?"
    fi
    

    根据 Kamil 对 printf 的建议,可以将所有逻辑保留在 if 中,而无需中间变量。

    if [[ 'a0' != $(printf '%.2s' "$(md5sum <<< "$foo")") ]] ; then
      echo "Warn: typo in password?"
    fi
    
    

    【讨论】:

    猜你喜欢
    • 2018-03-17
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2017-04-25
    • 2017-03-27
    相关资源
    最近更新 更多