#powershell
Вопрос:
Если я предоставлю этот сайт https://www.base64decode.org/ такие данные, как NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB
Я получаю такой результат, как 6qcjao8l96p5cf60smjiqogk75_20211021T170000Z
если я запущу следующие строки PS
$Encoding = 'default'
$Result = [System.Text.Encoding]:: $Encoding.GetString([System.Convert]::FromBase64String('NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB'))
Я получаю ошибку
Exception calling "FromBase64String" with "1" argument(s): "Invalid length for a Base-64 char array
or string."
At line:1 char:1
$Result = [System.Text.Encoding]:: $Encoding.GetString([System.Conver ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : NotSpecified: (:) [], MethodInvocationException
FullyQualifiedErrorId : FormatException
Я даже попытался дополнить строку, которая иногда работает, а иногда нет, в зависимости от строки. (Я не уверен, почему обивка не всегда работает)
function Get-PaddingRequired {
param (
[Parameter(Mandatory = $true)]
[String]$InputString
)
$modulo = ($InputString.Length % 3)
switch ($modulo) {
0 { $paddingRequired = $null }
1 { $paddingRequired = '==' }
2 { $paddingRequired = '=' }
}
Return [string]$paddingRequired
}
Работает NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB
в моей функции заполнения выше. К сожалению, я получаю только один =
правильный ответ ==
, который, похоже, сбивает с толку.
Должен быть лучший способ стать более надежным, как сайт https://www.base64decode.org/. Идеи ?
Комментарии:
1. Функция заполнения выглядит для меня нормально. Ваша примерная строка состоит из 59 символов, поэтому
=
правильное заполнение должно делить ее на 3.2. Ошибка здесь:
$Result = [System.Text.Encoding]:: $Encoding.GetString(
должно быть[System.Text.Encoding]::Default.GetString(
3. Ваш цитируемый веб-сайт пропускает непечатаемые байты. Это заставляет вас думать, что неправильная строка BASE64 является правильной. Я бы не счел это более «надежным».
NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB=
является правильной строкой BASE64. Использовать utilities-online.info/base64 чтобы увидеть разницу.4. @zett42 мы согласны. но когда я
NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB=
ввожу$Encoding = 'default' $Result = [System.Text.Encoding]:: $Encoding.GetString([System.Convert]::FromBase64String('NnFjamFvOGw5NnA1Y2Y2MHNtamlxb2drNzVfMjAyMTEwMjFUMTcwMDAwWiB='))
, я все равно получаю ошибку, как написано в моем вопросе.5. У вас есть пространство перед
$Encoding.GetString(...)
которым не должно быть
Ответ №1:
Основная проблема с вашим кодом вызвана простой опечаткой
Уберите пространство, которое у вас есть перед $Encoding
этим:
$Result = [System.Text.Encoding]:: $Encoding.GetString([System.Convert]::FromBase64String(...))
# ^