Phi*_*ayo 16 password encryption mysql
我创建了一个用户...但忘记了密码
mysql> 创建由 'right' 标识的用户 'blayo'@'%';
哪个 Linux 命令行工具可以像 mysql 5.5 一样加密密码?
mysql> 从 mysql.user 中选择 Password,User ------------------------------------------+------- + *920018161824B14A1067A69626595E68CB8284CB | 布拉约 |
...确保我使用正确的
$ 工具权 *920018161824B14A1067A69626595E68CB8284CB
小智 16
一些单线:
MySQL(可能需要您添加 -u(user) -p):
mysql -NBe "select password('right')"
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'
Run Code Online (Sandbox Code Playgroud)
珀尔:
perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'
Run Code Online (Sandbox Code Playgroud)
PHP :
php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'
Run Code Online (Sandbox Code Playgroud)
红宝石:
ruby -e 'require "digest/sha1"; puts "*" + Digest::SHA1.hexdigest(Digest::SHA1.digest("right")).upcase'
Run Code Online (Sandbox Code Playgroud)
所有输出:
*920018161824B14A1067A69626595E68CB8284CB
jsb*_*ngs 15
好吧,微不足道的(也许是作弊)方法是运行:
mysql -NBe "select password('right')"
Run Code Online (Sandbox Code Playgroud)
这将使用您的 mysql 版本使用的任何密码散列方案生成密码。[编辑:添加 -NB,它摆脱了列名和 ascii 表艺术。]
另一个使用shell:
echo -n 'right' | sha1sum | xxd -r -p |\
sha1sum | tr '[a-z]' '[A-Z]' | awk '{printf "*%s", $1}'
Run Code Online (Sandbox Code Playgroud)
解释:
echo -n
不换行打印sha1sum
第一个 SHA1xxd -r -p
解散哈希sha1sum
第二个SHA1tr '[a-z]' '[A-Z]'
转换为大写awk '{print "*" $1}'
添加前导 *更多细节:
在 2. 和 3. 之间,awk '{printf "%s", $1}'
可以插入一个可选 步骤来删除换行符和连字符。但是 xxd 无论如何都会忽略它们(感谢 dave_thompson_085)。
此外,步骤 5 和 6 可以通过将它们替换为{print "*" toupper($1)}
(感谢 dave_thompson_085)来立即完成。
MySQL 不会在命令行和日志中混淆密码,这仍然让我大吃一惊。这就是我添加答案而不是仅仅评论@Gilles 答案的唯一原因。
因此,当然,您可以像@patrix 建议的那样,以管理员身份登录 MySQL 并为您的 blayo 用户设置一个新密码。
然而,这样做的标准方法是使用 MySQL 的 password() 函数,它将明文密码作为参数(认真的?)。
如果这样做,您会将 MySQL 用户密码的纯文本版本留在您的 bash 历史记录和 MySQL 日志中,以便以后能够访问这些日志文件的任何人轻松检索。
拥有一个提示输入密码的小实用程序,而不将其回显到屏幕或日志中,然后为您提供生成的与 MySQL 兼容的哈希值不是更好吗?
所以,稍微修改一下@Gilles 的答案,一个使用 Python 的小 shell 脚本怎么样,如下所示。你可以很容易地修改它来对你的 MySQL 数据库运行一条 SQL 语句来一次性设置密码。但即使没有走那么远,只需将生成的哈希复制并粘贴到 SQL 语句中即可更新用户表:
#!/bin/bash
mysqlpwd=$(/usr/bin/python -c 'from hashlib import sha1; import getpass; print "*" + sha1(sha1(getpass.getpass("New MySQL Password:")).digest()).hexdigest()')
echo $mysqlpwd
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18934 次 |
最近记录: |