MD5哈希和基本64编码
-
28-09-2019 - |
题
如果我有一个32个字符串(MD5哈希),并且使用base64编码它,那么编码字符串的最大长度是多少?
解决方案
MD5值是 总是22个(有用的)字符长 在base64符号中。编码MD5哈希时,许多Base64算法还将附加2个字符的填充字符,从而使总数达到24个字符。填充没有添加任何有用的信息,可以丢弃。只有前22个字符很重要。
为什么:
MD5哈希是128位值。 Base64字符串中的每个字符都包含6位信息,因为该字符有64个可能的值,并且需要6个幂才能达到64个。每个字符中有6位信息,21个字符具有126位信息, 22个字符包含132位信息。由于128位不能在21个字符中适合,但确实适合22个字符(带有零用的空间),因此在Base64中,总有128位值表示为22个字符。
填充的注释:
我上面提到,许多基本64编码算法在编码MD5值时添加了几个字符。这是因为base64表示3个字节为4个字符。由于MD5具有16个字节的信息,因此许多基本64编码算法附加“ ==”,以指定16个字节的输入比下一个3的下一个倍数低2个字节,这将是18个字节。这两个均等符号没有任何信息为字符串添加任何信息,并且在存储时可以丢弃。
其他提示
按照 http://en.wikipedia.org/wiki/base64
“请注意,给定n个字节的输入,输出将为(n + 2 - ((n + 2)%3)) / 3 * 4个字节长,该字节会收敛到n * 4/3或1.333333n 。”
因此,它将是((32 + 2 - (32 + 2)%3)) / 3 * 4 = 34 - (34%3) / 3 * 4 =(34-1) / 3 * 4 = 33/3 *4 = 44个字符。
您可以始终以原始二进制形式(128位)提取它,并将其直接编码为基础64,这意味着将16字节而不是32转换为32,当基本64编码时,它将变为24字节。