Powershell Base64 URL 安全编码上面的二进制哈希字符串,使其适用于 HTTP 请求

Posted

技术标签:

【中文标题】Powershell Base64 URL 安全编码上面的二进制哈希字符串,使其适用于 HTTP 请求【英文标题】:Powershell Base64 URL-safe encode the binary hash string above to make it suitable for HTTP requests 【发布时间】:2021-12-07 05:48:57 【问题描述】:

我想对来自我之前代码行的输入的“二进制哈希字符串”值进行 Base64 URL 安全编码,以使其适合 HTTP 请求,即 final_hash = base64_url_safe_encode(binary_hash_str)。我可以在哪里使用最终的哈希密码在 powershell 中进行身份验证。 我在 powershell 中找不到任何代码。

【问题讨论】:

"用于身份验证" - 您打算将其作为标头的一部分传递(例如,用于基本身份验证,Authorization: Basic YWRtaW46...),还是作为 URL 中的查询参数(例如 @987654323 @)? 哈希密码将在此处发送:$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" $headers.Add("Content-Type", "application/json") $body = " username: user, password: hashed_pa​​ssword " $response = Invoke-RestMethod '192.158.10.21/api/token' -Method 'POST' -Headers $headers -Body $body $response 当服务器收到散列密码时,它会向我发送一个令牌,我将作为标头传递(“授权”,“承载访问令牌”) 【参考方案1】:

在 PowerShell 中将字节数组转换为 base64 可以使用 [Convert]::ToBase64String()

$binString = [System.Text.Encoding]::UTF8.GetBytes("Secret string")
$base64String = [Convert]::ToBase64String($binString)

如果您想将生成的 base64 字符串用作请求负载的一部分(例如,请求头或请求正文的一部分),您可以继续使用它:

Invoke-WebRequest $uri -Header @ Authorization = "Basic $base64String"

如果您需要在 url 本身中将其作为查询参数传递,请使用 [uri]::EscapeDataString() 对其进行转义:

$URI = 'https://domain.tld/path?param=0' -f [uri]::EscapeDataString($base64String)
Invoke-WebRequest $URI

【讨论】:

谢谢,我会试一试

以上是关于Powershell Base64 URL 安全编码上面的二进制哈希字符串,使其适用于 HTTP 请求的主要内容,如果未能解决你的问题,请参考以下文章

URL编码表 Base64编码表 HTTP消息含义

URL编码表%20Base64编码表%20HTTP消息含义

Base64编解码是什么?

python3url编解码base64编解码ASE加解密

URL安全的Base64编码,解码

如何在 C# 中实现 Base64 URL 安全编码?