提问人:Dapkz 提问时间:8/3/2023 更新时间:8/3/2023 访问量:118
Powershell Base64 解码为字节十六进制
Powershell Base64 Decode to bytes hex
问:
我正在尝试从 chrome 的本地状态获取 base64 解码结果的十六进制二进制 (\x**)。
当我使用
[System.Convert]::FromBase64String($local_state.os_crypt.encrypted_key)
我得到一个字节数组,但不是十六进制,我想要的是来自 python 的 base64 模块的 base64.b64decode(“BASE64_ENCODED_STRING”) 之类的东西 我不知道如何在 powershell 中实现这个结果,所以如果有人能提供帮助,我将不胜感激:)
我现在 :
$local_state=Get-Content -Path "$($env:LOCALAPPDATA)\\Google\\Chrome\\User Data\\Local State" | ConvertFrom-Json
[System.Convert]::FromBase64String($local_state.os_crypt.encrypted_key)
powershell 和 python 之间的区别示例: Python 输出:b'\x01\x00\x01' Powershell 输出:01 00 01
答:
1赞
iRon
8/3/2023
#1
使用 ConvertFrom-SecureString
cmdlet:
$SecureString = Read-Host -AsSecureString
$Hex = $SecureString | ConvertFrom-SecureString
默认(六边形)输出
$Hex
01000000d08c9ddf0115d1118c7a00c04fc297eb01000000da4b9d0c09bdb140b3060606f3557e12000000000200000000001066000000010000200000003e5e7e364bba09ff85c69e5ab52d6503c9782f2e6fb280e6d5259adb194d5872000000000e8000000002000020000000fbaff7af38d8a7fa03283907bd428a0160ab0e17748eaef159767f3dac4699c310000000700931ab89b21c663e2d8c55eb62328d40000000883276253b23475ea08afacaba679cc97cfb17a16c8155bcc4f1d4210ebcc7506c4e1d94b94aa18d9454c9795ce4e857a063267027c36f1c8ae1ba64da3d1863
不确定为什么需要这种格式:
$Hex -replace '..', '\x$&'
\x01\x00\x00\x00\xd0\x8c\x9d\xdf\x01\x15\xd1\x11\x8c\x7a\x00\xc0\x4f\xc2\x97\xeb\x01\x00\x00\x00\xda\x4b\x9d\x0c\x09\xbd\xb1\x40\xb3\x06\x06\x06\xf3\x55\x7e\x12\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x10\x66\x00\x00\x00\x01\x00\x00\x20\x00\x00\x00\x79\x5d\x5a\x40\xed\xde\xc7\xea\xad\x34\xe3\x95\x05\x9b\x6c\x62\xc9\x0f\x46\xa9\xe3\xb2\x8f\x44\xe1\x05\xe4\xd2\xe1\x53\x82\xad\x00\x00\x00\x00\x0e\x80\x00\x00\x00\x02\x00\x00\x20\x00\x00\x00\x9f\x46\x73\x15\x59\x55\x4b\xd6\x49\xc8\x7f\x65\xc6\x65\xf5\x46\xc8\x82\xc7\x2b\x1f\xc0\xac\x85\x09\x29\x57\x53\x0a\xde\x1c\x03\x10\x00\x00\x00\x57\x73\xd9\xfc\xe1\xe0\x00\x63\x33\xcf\x8d\xf1\xd0\xad\xb7\xf0\x40\x00\x00\x00\x8d\x54\x05\xae\x06\x15\x25\x74\xfd\x5c\xf6\x6e\xb3\xce\xf0\xa7\xd6\x32\x6b\xb5\x18\xe8\xd1\x85\xf1\xf2\x45\x13\x8e\xbc\x15\x38\x84\x14\xb1\xdb\x89\x9c\x74\xb2\xa1\xf6\xf8\x48\x1f\x61\x5f\x26\xe9\x2c\x78\x2d\xeb\x3c\x81\x1b\x74\x77\x2a\x5d\x31\x80\x20\xb4
实际字节数
$Bytes = [byte[]] -split ($Hex -replace '..', '0x$& ')
"$Bytes"
1 0 0 0 208 140 157 223 1 21 209 17 140 122 0 192 79 194 151 235 1 0 0 0 218 75 157 12 9 189 177 64 179 6 6 6 243 85 126 18 0 0 0 0 2 0 0 0 0 0 16 102 0 0 0 1 0 0 32 0 0 0 121 93 90 64 237 222 199 234 173 52 227 149 5 155 108 98 201 15 70 169 227 178 143 68 225 5 228 210 225 83 130 173 0 0 0 0 14 128 0 0 0 2 0 0 32 0 0 0 159 70 115 21 89 85 75 214 73 200 127 101 198 101 245 70 200 130 199 43 31 192 172 133 9 41 87 83 10 222 28 3 16 0 0 0 87 115 217 252 225 224 0 99 51 207 141 241 208 173 183 240 64 0 0 0 141 84 5 174 6 21 37 116 253 92 246 110 179 206 240 167 214 50 107 181 24 232 209 133 241 242 69 19 142 188 21 56 132 20 177 219 137 156 116 178 161 246 248 72 31 97 95 38 233 44 120 45 235 60 129 27 116 119 42 93 49 128 32 180
基数64
[Convert]::ToBase64String($Bytes)
AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA2kudDAm9sUCzBgYG81V+EgAAAAACAAAAAAAQZgAAAAEAACAAAAB5XVpA7d7H6q0045UFm2xiyQ9GqeOyj0ThBeTS4VOCrQAAAAAOgAAAAAIAACAAAACfRnMVWVVL1knIf2XGZfVGyILHKx/ArIUJKVdTCt4cAxAAAABXc9n84eAAYzPPjfHQrbfwQAAAAI1UBa4GFSV0/Vz2brPO8KfWMmu1GOjRhfHyRROOvBU4hBSx24mcdLKh9vhIH2FfJukseC3rPIEbdHcqXTGAILQ=
往返
$Base64 = <your base64> # e.g.: 'AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA2kudDAm9sUCzBgYG81V+EgAAAAACAAAAAAAQZgAAAAEAACAAAAB5XVpA7d7H6q0045UFm2xiyQ9GqeOyj0ThBeTS4VOCrQAAAAAOgAAAAAIAACAAAACfRnMVWVVL1knIf2XGZfVGyILHKx/ArIUJKVdTCt4cAxAAAABXc9n84eAAYzPPjfHQrbfwQAAAAI1UBa4GFSV0/Vz2brPO8KfWMmu1GOjRhfHyRROOvBU4hBSx24mcdLKh9vhIH2FfJukseC3rPIEbdHcqXTGAILQ='
$Bytes = [System.Convert]::FromBase64String($Base64)
$Hex = -Join $Bytes.Foreach{ $_.ToString('x2') }
$SecureString = $Hex | ConvertTo-SecureString
$SecureString | ConvertFrom-SecureString -AsPlainText
相关新闻: #19948
Convert*-SecureString
cmdlet 增强功能
评论
0赞
Dapkz
8/3/2023
Sorry in 法语 : pastebin.com/raw/jhTSUmaz
0赞
iRon
8/3/2023
@Dapkz,请只使用英文和文字(无图片)。“无法更新密码。输入的新密码不符合域长度、复杂性或历史记录规范。这可能是因为您使用了我的示例 base64 字符串,并且数据保护 API 仅在同一台 PC 上的同一帐户下工作(根据设计,因为它包括安全性)。对于往返行程,您需要从头开始(并创建自己的 base64 字符串)。
0赞
Dapkz
8/3/2023
不,我使用了本地状态的加密密钥
0赞
Dapkz
8/3/2023
$local_state=Get-Content -Path "$($env:LOCALAPPDATA)\\Google\\Chrome\\User Data\\Local State" | ConvertFrom-Json $key = $local_state.os_crypt.encrypted_key $Bytes = [System.Convert]::FromBase64String($key) $Hex = -Join $Bytes.Foreach{ $_.ToString('x2') } $SecureString = $Hex | ConvertTo-SecureString $SecureString | ConvertFrom-SecureString -AsPlainText
1赞
iRon
8/3/2023
无论如何,您应该能够确认这可以上下工作(在您自己的帐户下)。这意味着密钥 () 是在另一个 (DPAPI) 帐户下创建的,它是使用高级加密标准 (AES) 加密算法以外的其他加密创建的,或者使用自定义 -Key/-SecureKey 来保护它。由于这往往会朝着原始问题的另一个方向发展,我建议您为此提出一个新问题。$local_state.os_crypt.encrypted_key
评论
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($Local_State.os_crypt.encrypted_key)) | Format-Hex
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($local_state.os_crypt.encrypted_key))
-join ([System.Convert]::FromBase64String($local_state.os_crypt.encrypted_key) | % { '\x{0:x2}' -f $_ })