所有的加密最后都用==什么?
What all encryption uses == in the last?
我知道大多数 Base64 编码的末尾都有 ==
。有没有其他用途相同的?
例如,我发现了这个:
nijdRcCHIUnketWzFbcxmvqQKKDnFW05LSE3ttTjoqyBna7JT87AwxeKdoOszXYODMRm6UfA8jK97qgV8A==
但不是Base64类型。还能是什么?
您发布的字符串是有效的 Base64 字符串。
当且仅当它编码的字节数 mod 3 等于 1 时,Base64 字符串将以 ==
结尾。
>>> for i in range(10):
... print(i, base64.b64encode(b"\x00"*i))
...
0 b''
1 b'AA=='
2 b'AAA='
3 b'AAAA'
4 b'AAAAAA=='
5 b'AAAAAAA='
6 b'AAAAAAAA'
7 b'AAAAAAAAAA=='
8 b'AAAAAAAAAAA='
9 b'AAAAAAAAAAAA'
你看到规律了吗?
碰巧 16 字节(128 位)加密密钥 非常常用 Base64 编码,并且由于 16 mod 3 = 1,它们的编码将以 ==
结尾。但是 你的 字符串,解码后是 61 字节(488 位)长。对于大多数类型的加密密钥来说,它太大了,而且对于 RSA 密钥来说,小 也太大了。
这是您的字符串,已解码,然后进行了十六进制转储:
00000000 9e 28 dd 45 c0 87 21 49 e4 7a d5 b3 15 b7 31 9a |.(.E..!I.z....1.|
00000010 fa 90 28 a0 e7 15 6d 39 2d 21 37 b6 d4 e3 a2 ac |..(...m9-!7.....|
00000020 81 9d ae c9 4f ce c0 c3 17 8a 76 83 ac cd 76 0e |....O.....v...v.|
00000030 0c c4 66 e9 47 c0 f2 32 bd ee a8 15 f0 |..f.G..2.....|
0000003d
我没有看到任何东西告诉我它到底是什么,file(1)
也被难住了。它可能足够随机以被加密,但我无法通过肉眼确定。 (如果它 是 随机的,那并不意味着它是加密的!它可能只是随机数生成器的输出。)
重要的是要了解 Base64 不是加密, 因为它没有密钥。我不需要知道或猜测任何秘密信息来反转字符串的 Base64 编码。 (术语 'encoding' 可能会造成混淆 — 它更笼统。UTF-8、Base64 和 DEFLATE 都是 编码 ,AES-CBC 也是如此,但所有他们,只有 AES-CBC 是 加密 。)
我知道大多数 Base64 编码的末尾都有 ==
。有没有其他用途相同的?
例如,我发现了这个:
nijdRcCHIUnketWzFbcxmvqQKKDnFW05LSE3ttTjoqyBna7JT87AwxeKdoOszXYODMRm6UfA8jK97qgV8A==
但不是Base64类型。还能是什么?
您发布的字符串是有效的 Base64 字符串。
当且仅当它编码的字节数 mod 3 等于 1 时,Base64 字符串将以 ==
结尾。
>>> for i in range(10):
... print(i, base64.b64encode(b"\x00"*i))
...
0 b''
1 b'AA=='
2 b'AAA='
3 b'AAAA'
4 b'AAAAAA=='
5 b'AAAAAAA='
6 b'AAAAAAAA'
7 b'AAAAAAAAAA=='
8 b'AAAAAAAAAAA='
9 b'AAAAAAAAAAAA'
你看到规律了吗?
碰巧 16 字节(128 位)加密密钥 非常常用 Base64 编码,并且由于 16 mod 3 = 1,它们的编码将以 ==
结尾。但是 你的 字符串,解码后是 61 字节(488 位)长。对于大多数类型的加密密钥来说,它太大了,而且对于 RSA 密钥来说,小 也太大了。
这是您的字符串,已解码,然后进行了十六进制转储:
00000000 9e 28 dd 45 c0 87 21 49 e4 7a d5 b3 15 b7 31 9a |.(.E..!I.z....1.|
00000010 fa 90 28 a0 e7 15 6d 39 2d 21 37 b6 d4 e3 a2 ac |..(...m9-!7.....|
00000020 81 9d ae c9 4f ce c0 c3 17 8a 76 83 ac cd 76 0e |....O.....v...v.|
00000030 0c c4 66 e9 47 c0 f2 32 bd ee a8 15 f0 |..f.G..2.....|
0000003d
我没有看到任何东西告诉我它到底是什么,file(1)
也被难住了。它可能足够随机以被加密,但我无法通过肉眼确定。 (如果它 是 随机的,那并不意味着它是加密的!它可能只是随机数生成器的输出。)
重要的是要了解 Base64 不是加密, 因为它没有密钥。我不需要知道或猜测任何秘密信息来反转字符串的 Base64 编码。 (术语 'encoding' 可能会造成混淆 — 它更笼统。UTF-8、Base64 和 DEFLATE 都是 编码 ,AES-CBC 也是如此,但所有他们,只有 AES-CBC 是 加密 。)