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_password " $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 请求的主要内容,如果未能解决你的问题,请参考以下文章