Powershell Base64解码-不规则行为

问题描述 投票:0回答:1

我在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
  }

显然,****隐藏了敏感信息。

因此,我尝试返回已编码的Azure Blob URL。它设法解码,但是返回并出错,似乎在URL的末尾添加了一个字符-使它与base64解码期望的不同步。

结果看起来像这样-

https://*******.blob.core.windows.net/files/REPORTS/*****/SEISMIC_ACQUISITION/ACQUISITION_REPORT_APPENDIX4_DAY_LOGS_JD_201.pdf5 

总是在字符串末尾添加数字5。

关于这里发生的事情有什么想法吗?

这是完整的代码-没有其他事情了。

所发生的全部操作是将搜索查询发送到Azure搜索,并返回与搜索查询匹配的Blob /文档的url。 Azure返回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转换的那一行。

azure powershell search encoding base64
1个回答
0
投票

metadata_storage_path“ base64编码”值显然是base64的mangled版本,其中删除了所有尾随的“ =”,并在其中放置了一个数字,指示删除了多少“ =”。这是为了允许在URL中使用base64字符串更简单。

请参阅此问题以获取更多详细信息:

How to decode metadata_storage_path produced by Azure Search indexer in .NET Core

您需要补偿此修改,才能返回有效的base64编码字符串,然后才能对其进行解码。链接的答案为执行此操作提供了一些选项。

© www.soinside.com 2019 - 2024. All rights reserved.