如果我有一個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