密码哈希不适用于单引号
Password hash not working with single quotes
我正在尝试使用 Perl 中的 crypt 哈希函数对密码进行哈希处理。到目前为止,在 Bash 脚本中我有:
password='Pa$$word'
hashedPassword="$(perl -e "print crypt('$password', 'salt'), \"\n"")"
然后我 modify/copy /etc/shadow 使用 sed:
sed -e '/^user1:/s_:[^:]*:_:'"$hashedPassword"':_' /etc/shadow > /tmp/shadow
该方法有效,但传递包含单引号的字符串时除外。如何处理包含 ' 单引号的密码? 运行 索拉里斯 10 OS.
将密码作为参数提供给您的单行代码,而不是直接在代码中插入:
#!/usr/bin/env bash
password='Pa$$word'
hashedPassword=$(perl -e 'print crypt($ARGV[0], "salt"), "\n"' $password)
echo "p='$password', h='$hashedPassword'"
输出:
p='Pa$$word', h='saFQXTeqbkiIQ'
由于密码包含 $
和 $
是 perl 中的语法,因此在脚本中不容易硬传递,其他选项是通过参数或环境传递。
# by argument
perl -e '($password, $salt)=@ARGV;print crypt($password, $salt), "\n"' "$password" "$salt"
# by environment variable
password=$password salt=$salt perl -e 'print crypt($ENV{password}, $ENV{salt}), "\n"'
您的问题在 bash。尝试通过将其括在单引号中来设置包含单引号的 shell 变量将不起作用。根据手册页:
Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.
我正在尝试使用 Perl 中的 crypt 哈希函数对密码进行哈希处理。到目前为止,在 Bash 脚本中我有:
password='Pa$$word'
hashedPassword="$(perl -e "print crypt('$password', 'salt'), \"\n"")"
然后我 modify/copy /etc/shadow 使用 sed:
sed -e '/^user1:/s_:[^:]*:_:'"$hashedPassword"':_' /etc/shadow > /tmp/shadow
该方法有效,但传递包含单引号的字符串时除外。如何处理包含 ' 单引号的密码? 运行 索拉里斯 10 OS.
将密码作为参数提供给您的单行代码,而不是直接在代码中插入:
#!/usr/bin/env bash
password='Pa$$word'
hashedPassword=$(perl -e 'print crypt($ARGV[0], "salt"), "\n"' $password)
echo "p='$password', h='$hashedPassword'"
输出:
p='Pa$$word', h='saFQXTeqbkiIQ'
由于密码包含 $
和 $
是 perl 中的语法,因此在脚本中不容易硬传递,其他选项是通过参数或环境传递。
# by argument
perl -e '($password, $salt)=@ARGV;print crypt($password, $salt), "\n"' "$password" "$salt"
# by environment variable
password=$password salt=$salt perl -e 'print crypt($ENV{password}, $ENV{salt}), "\n"'
您的问题在 bash。尝试通过将其括在单引号中来设置包含单引号的 shell 变量将不起作用。根据手册页:
Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.