在 powershell 中创建 htpasswd SHA1 密码

Create htpasswd SHA1 password in powershell

我想在 PowerShell 中创建一个基于 SHA1 的 htpasswd 密码。

使用单词 "test" 作为密码我测试了各种功能并且总是得到 SHA1 值:

a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

在 htpasswd 文件中对此进行测试

user:{SHA}a94a8fe5ccb19ba61c4c0873d391e987982fbbd3

我无法登录。

使用在线 htpasswd 生成器。例如 https://www.askapache.com/online-tools/htpasswd-generator/ 我得到

user:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

效果很好。

起初我以为我需要做一个base64 en/decoding,但事实并非如此

有人知道如何从 "test" 到 "qUqP5cyxm6YcTAhz05Hph5gvu9M=" 吗?

At first I thought I need to do a base64 en/decoding

确实是这样的!但是需要编码的并不是字符串"a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",而是它所代表的底层字节数组

$username = 'user'
$password = 'test'

# Compute hash over password
$passwordBytes = [System.Text.Encoding]::ASCII.GetBytes($password)
$sha1 = [System.Security.Cryptography.SHA1]::Create()
$hash = $sha1.ComputeHash($passwordBytes)

# Had we at this point converted $hash to a hex string with, say:
#
#   [BitConverter]::ToString($hash).ToLower() -replace '-'
#
# ... we would have gotten "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"


# Convert resulting bytes to base64
$hashedpasswd = [convert]::ToBase64String($hash)

# Generate htpasswd entry
"${username}:{{SHA}}${hashedpasswd}"