我有一个脚本,每次都会使用随机编码生成加密文本。要使用utf-8编码将加密文本保存在数据库中,我将加密文本转换为base64编码。我认为它转换正确,生成的字符串可能像( ÷§úAû‰ñÁyˆÚªÌE)
。
虽然加密文本包含base64编码字符集(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
)中不存在的字符,但base64编码如何转换奇怪的加密文本?
作为base64编码字符列表的参考,这里是关联的RFC。
答案 0 :(得分:1)
Base64用于将任何二进制数据编码为有效的ASCII。你编码的数据 not 必须是Base64字符集(这会使整个操作变得毫无用处)。
Base64简单地将二进制数据字节用于字节 1 ,并将这些位映射为其字符的组合。因此,输入没有其他要求,而是由字节组成。
在÷§úAû‰ñÁyˆÚªÌE
的情况下,它会像这样转换:
你说输入是UTF-8 2 ,所以字节是C3 B7 C2 A7 C3 BA 41 C3 BB E2 80 B0 C3 B1 C3 81 79 CB 86 C3 9A C2 AA C3 8C 45
(UTF-8中的÷§úAû‰ñÁyˆÚªÌE
)。
所以取前三个字节(C3 B7 C2
)并映射它们:
Byte | C3 | B7 | C2 |
Bits | 1 1 0 0 0 0 1 1 | 1 0 1 1 0 1 1 1 | 1 1 0 0 0 0 1 0 |
Index | 48 | 59 | 31 | 2 |
Base64 | w | 7 | f | C |
因此前四个字符是w7fC
。然后只重复输入的其余部分(如果输入不是三个字节的倍数,那么一些填充完成,这里没有介绍)。
如您所见,输入可以是任何二进制数据。
1 Base64使用8位字节。
2 幸运的是,UTF-8使用8位代码单元。
您可以在Wikipedia上详细了解编码的完成方式。