像 mysql 一样加密密码

像 mysql 一样加密密码

我创建了一个用户...但忘记了密码

mysql> 创建由 'right' 标识的用户 'blayo'@'%';

哪个Linux命令行工具可以与 mysql 5.5 一样加密密码吗?

mysql> 从 mysql.user 中选择密码、用户
------------------------------------------+-------- +
*920018161824B14A1067A69626595E68CB8284CB |布莱约 |

...确保我使用正确的

$ 工具右
*920018161824B14A1067A69626595E68CB8284CB

答案1

一些单行:

MySQL(可能需要您添加 -u(user) -p):

mysql -NBe "select password('right')"

Python:

python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'

珀尔:

perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'

PHP:

php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'

红宝石:

ruby -e 'require "digest/sha1"; puts "*" + Digest::SHA1.hexdigest(Digest::SHA1.digest("right")).upcase'

所有输出:

*920018161824B14A1067A69626595E68CB8284CB

答案2

好吧,微不足道的(也许作弊)方式是运行:

mysql -NBe "select password('right')"

这将使用您的 mysql 版本使用的任何密码散列方案生成一个密码。 [编辑:添加了 -NB,它去掉了列名和 ascii 表艺术。]

答案3

另一种使用 shell 的方式:

echo -n 'right' | sha1sum | xxd -r -p |\
sha1sum | tr '[a-z]' '[A-Z]' | awk '{printf "*%s", $1}'

解释:

  1. echo -n打印时不换行
  2. sha1sum第一个 SHA1
  3. xxd -r -p取消十六进制哈希
  4. sha1sum第二个 SHA1
  5. tr '[a-z]' '[A-Z]'转换为大写
  6. awk '{print "*" $1}'添加前导 *

更多细节:

在 2. 和 3. 之间, awk '{printf "%s", $1}'可以插入一个可选步骤来删除换行符和连字符。但 xxd 无论如何都会忽略它们(感谢 dave_thompson_085)。

{print "*" toupper($1)}此外,通过将步骤 5 和 6 替换为(感谢 dave_thompson_085),可以立即完成步骤 5 和 6 。

答案4

哈希值是 sha1(sha1(密码))。既然没有(这是一个严重的安全漏洞),你可以在表中查找哈希值

仅使用sha1sumGNU coreutils 或 BusyBox 中的 POSIX 工具加上 sha1(sha1(password)) 计算起来很烦人,因为该sha1sum命令以十六进制打印出摘要,并且没有标准工具可以转换为二进制。

awk "$(printf %s 'right' | sha1sum |
       sed -e 's/ .*//' -e 's/../, 0x&/g' \
           -e 's/^/BEGIN {printf "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"/' \
           -e 's/$/; exit}/')" | sha1sum

Python 在其标准库中有标准摘要,因此它是一个简单的单行代码。

printf %s 'right' |
python -c 'from hashlib import sha1; import sys; print sha1(sha1(sys.stdin.read()).digest()).hexdigest()'

或者在一行中输入密码:

python -c 'from hashlib import sha1; print sha1(sha1("right").digest()).hexdigest()'

相关内容