我有一个用 base64 编码的加密文件:
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
当我跑步时:
cat encryptedfile | openssl enc -d -a
我得到了一堆问号符号。为什么会这样?
答案1
让我们看看file
您的数据说明了什么:
$ base64 -d <<EOF | file -
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
EOF
/dev/stdin: openssl enc'd data with salted password
所以,后使用 base64 解码后,您将获得加密数据。现在od -c
:
$ base64 -d <<EOF | od -c
U2FsdGVkX19hoS7DQSHERIkTzT3Hp7RUEjMAh6UDOP6YjRB/XQey7TKoySJiZTni
WbCfJLhihMD9CkohBnvrY8UBkh2dbi1K6hQqf8X9ENGFNWUxqmhYMG+WrBsPwhpB
I1qUt91IKlPS1YMZ0UDyBieDwFyqFi3izGhqXoOuzo8=
EOF
0000000 S a l t e d _ _ a 241 . 303 A ! 304 D
0000020 211 023 315 = 307 247 264 T 022 3 \0 207 245 003 8 376
0000040 230 215 020 177 ] \a 262 355 2 250 311 " b e 9 342
0000060 Y 260 237 $ 270 b 204 300 375 \n J ! 006 { 353 c
0000100 305 001 222 035 235 n - J 352 024 * 177 305 375 020 321
0000120 205 5 e 1 252 h X 0 o 226 254 033 017 302 032 A
0000140 # Z 224 267 335 H * S 322 325 203 031 321 @ 362 006
0000160 ' 203 300 \ 252 026 - 342 314 h j ^ 203 256 316 217
0000200
显然,并非所有这些字节都是我们常用编码(ASCII 或 UTF-8)中的文本。终端无法理解大多数字节,并将它们显示为问号。其中一些显示为 ASCII 文本,一些显示为 Unicode 图表中较高位置的符号(Ώ
例如),因为终端试图理解数据。
加密数据不应为文本,因此它没有理由坚持某些编码允许的字节序列。它可以使用任何可用的字节序列,而且它确实这样做了。
答案2
Abase64编码字符串仅由 64 个可打印字符组成,
例如 MIME base64 A-Z
,a-z
,0-9
,+
,/
。
如果你解码该字符串,你将获得从 0 到 255 的完整字节范围,其中还包含不可打印的字符,例如控制字符显示为问号。