如果我有一个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字节。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top