2011-05-22 12 views
3

我有一些sha256哈希值,這些哈希值是註冊系統的產品ID。我想將這些信息提供給最終用戶,我希望它只包含可打印的字符(最好是a-z,A-Z和0-9)。我嘗試了正則十六進制和base64,但它們都產生很長的結果,並不令人滿意。我希望以儘可能小的字母數字格式表示數據,但不會失去完整性。請注意,數據不需要轉換回來,所以只要沒有丟失安全性,它就可以是單向過程。如何以最小可能的可打印方式表示32字節的二進制數據

我在C工作。

在此先感謝您的幫助!

親切的問候,

菲利普Bennefall

+3

」請注意,數據不需要轉換回來,所以只要沒有丟失安全性,它可以是單向過程。「 然後只需打印任何東西。 – nullpotent 2011-05-22 16:14:40

+4

Base64是專門爲您的要求,我看不出有可能改善,當然不會超過百分之幾,除非通過可打印的字符,你可以包括非ASCII字符。 – Jodes 2011-05-22 16:16:43

+0

+1到Base64。如果您想讓用戶更容易閱讀,請在MS的預定點放置一些破折號。如果需要的話,你可以去掉尾隨。 – 2011-05-22 16:18:46

回答

3

32字節的數據將是非常困難的有意義提供在不支持剪切/粘貼一個介質的用戶,但你所說的那樣。

減少用於產品ID的數據量,並且可以使用Base-64和朋友。

2

如果Base64不適合你的32個字節,MD5可以減少到16個字節 - shazam,現在只有一半長。

爲什麼,把32字節的哈希散列到16字節是荒謬的,但基本上你要求的是,無論是16字節還是任何其他字節數。你將失去信息。

或者只是使用MD5開始,因爲它是一個較小的散列。

如果用戶不打算輸入這個數字,這個表示又有多重要?所有這些長散列轉儲都是不可思議的。當我看到他們時,我只是看最後3個字符。 「

相關問題