如果我有一个32字符的字符串(MD5哈希),我使用Base64进行编码,那么编码字符串的最大长度是多少?MD5哈希和Base64编码
11
A
回答
31
MD5的值是总是22(有用)字符长以Base64表示法。在编码MD5散列时,许多Base64算法还会附加2个填充字符,从而使总数达到24个字符。填充没有添加有用的信息,可以丢弃。只有前22个字符很重要。
原因如下:
MD5哈希是一个128位的值。 Base64字符串中的每个字符都包含6位信息,因为该字符有64个可能的值,并且需要6个幂的2才能达到64.每个字符中有6位信息,21个字符有126位信息, 22个字符包含132位信息。由于128位不能在21个字符之内,但在22个字符之内(有一点空间可用),在Base64中128位值总是以22个字符表示。
在填充的说明:
我上述许多Base64编码算法提到编码MD5值时添加几个填充的字符。这是因为Base64将3个字节的信息表示为4个字符。由于MD5有16个字节的信息,因此许多Base64编码算法会附加“==”来指定16个字节的输入比3的下一个倍数短2个字节,这将是18个字节。这两个相同的符号不会给字符串添加任何信息,并且可以在存储时丢弃。
7
作为每http://en.wikipedia.org/wiki/Base64
“。注意,给定的n个字节的输入,输出将是第(n + 2 - ((N + 2)%3))/ 3 * 4个字节长,这收敛到对于大n,n * 4/3或1.33333n。“ ((32 + 2 - (32 + 2)%3))/ 3 * 4 = 34 - (34%3)/ 3 * 4 =(34-1)/ 3 * 4(012)。 = 33/3 * 4 = 44个字符。
您可以始终以原始二进制形式(128位)提取它,并将其直接编码到基本64位,这意味着转换16个字节而不是32位,这会在base 64编码时变为24个字节。
相关问题
- 1. SQL 2005 MD5哈希和C#MD5哈希
- 2. SHA512和MD5哈希
- 3. C#MD5哈希Groovy的MD5哈希
- 4. PHP MD5(MD5)哈希
- 5. C#SHA-2(512)Base64编码哈希
- 6. PHP MD5哈希
- 7. MD5和SHA1 C++哈希库
- 8. 解密MD5哈希
- 9. MD5哈希更快
- 10. 生成MD5哈希
- 11. GPU MD5/SHA1哈希
- 12. Java MD5哈希不匹配.NET哈希
- 13. 正确的MD5哈希解码资源哈希
- 14. 快速验证md5哈希密码
- 15. Hybris如何提供MD5密码哈希?
- 16. python django unsalted md5密码哈希格式
- 17. php代码md5哈希解释
- 18. 我需要base64编码我的盐(哈希密码)吗?
- 19. Python和其他文件哈希之间的MD5哈希差异
- 20. JavaScript MD5哈希与Java Applet MD5散列?
- 21. MD5哈希和Python中的比较
- 22. Md5哈希标识和存档图像
- 23. .net和java的不同MD5哈希值
- 24. MD5哈希和正则表达式
- 25. SharePoint文件MD5哈希
- 26. MD5哈希在药剂
- 27. MD5哈希中的WindowsPhone 8
- 28. VB.net + mySQL + md5哈希建议
- 29. 制作md5散列哈希
- 30. MD5哈希生成问题
如果你有一个32字符的字符串是一个MD5散列,那么它已经是十六进制编码,并且不需要base64对它进行编码。 – 2010-11-25 14:42:45
MD5哈希不是十六进制!它是16个字节 - 十六进制只是一个传统的表示。 – 2010-11-25 23:35:20