Powershell Base64 解码 - 不规则行为
Powershell Base64 decoding - irregular behavior
我在 Powershell 中解码 base64 字符串时发现了一个奇怪的问题。
$url = "https://*******.search.windows.net/indexes/azureblob-index/docs?api-version=2019-05-06&search=*"
$headers = @{
"api-version" = "2019-05-06"
"Content-Type" = "application/json"
"api-key" = "**********"
}
$result = Invoke-webrequest -Uri $url -Headers $headers -Method Get | ConvertFrom-Json
$values = $result.value
foreach ($value in $values)
{
$path = $value.metadata_storage_path
$bloburl = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($path))
$bloburl
}
**** 显然在隐藏敏感信息。
所以我正在尝试 return 编码的 Azure blob URL。它设法解码,但是,它 returns 和错误并且似乎在 URL 的末尾添加了一个字符 - 使其与 base64 解码所期望的不同步。
结果如下 -
https://*******.blob.core.windows.net/files/REPORTS/*****/SEISMIC_ACQUISITION/ACQUISITION_REPORT_APPENDIX4_DAY_LOGS_JD_201.pdf5
它始终是添加到字符串末尾的数字 5。
关于这里发生的事情有什么想法吗?
这是完整代码 - 没有其他内容。
所有发生的事情都是向 Azure 搜索发送搜索查询,然后 returning 匹配搜索查询的 blobs/documents 的 url。 Azure return 是一个 base64 字符串,我想将其解码为纯可读文本。
错误是:
Exception calling "FromBase64String" with "1" argument(s): "Invalid length for a Base-64 char array or string."
At line:25 char:9
+ $bloburl = [System.Text.Encoding]::UTF8.GetString([System.Con ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
它出现在它从 base64 转换的那一行。
metadata_storage_path
"base64 encoded" 值显然是 base64 的 mangled 版本,其中删除了任何尾随的“=”,并在此处放置了一个数字以指示删除了多少个“=”。这是为了让 base64 字符串在 url 中更容易使用。
有关详细信息,请参阅此问题:
您需要补偿此修改以恢复有效的 base64 编码字符串,然后才能对其进行解码。链接的答案提供了一些如何执行此操作的选项。
我在 Powershell 中解码 base64 字符串时发现了一个奇怪的问题。
$url = "https://*******.search.windows.net/indexes/azureblob-index/docs?api-version=2019-05-06&search=*"
$headers = @{
"api-version" = "2019-05-06"
"Content-Type" = "application/json"
"api-key" = "**********"
}
$result = Invoke-webrequest -Uri $url -Headers $headers -Method Get | ConvertFrom-Json
$values = $result.value
foreach ($value in $values)
{
$path = $value.metadata_storage_path
$bloburl = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($path))
$bloburl
}
**** 显然在隐藏敏感信息。
所以我正在尝试 return 编码的 Azure blob URL。它设法解码,但是,它 returns 和错误并且似乎在 URL 的末尾添加了一个字符 - 使其与 base64 解码所期望的不同步。
结果如下 -
https://*******.blob.core.windows.net/files/REPORTS/*****/SEISMIC_ACQUISITION/ACQUISITION_REPORT_APPENDIX4_DAY_LOGS_JD_201.pdf5
它始终是添加到字符串末尾的数字 5。
关于这里发生的事情有什么想法吗?
这是完整代码 - 没有其他内容。
所有发生的事情都是向 Azure 搜索发送搜索查询,然后 returning 匹配搜索查询的 blobs/documents 的 url。 Azure return 是一个 base64 字符串,我想将其解码为纯可读文本。
错误是:
Exception calling "FromBase64String" with "1" argument(s): "Invalid length for a Base-64 char array or string."
At line:25 char:9
+ $bloburl = [System.Text.Encoding]::UTF8.GetString([System.Con ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : FormatException
它出现在它从 base64 转换的那一行。
metadata_storage_path
"base64 encoded" 值显然是 base64 的 mangled 版本,其中删除了任何尾随的“=”,并在此处放置了一个数字以指示删除了多少个“=”。这是为了让 base64 字符串在 url 中更容易使用。
有关详细信息,请参阅此问题:
您需要补偿此修改以恢复有效的 base64 编码字符串,然后才能对其进行解码。链接的答案提供了一些如何执行此操作的选项。