我從書中讀取SHA-256,但本書並未解釋它的用途。本書解釋瞭如何使用Java創建它。但是,我沒有明白Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1))
的用途。有人能詳細解釋一下嗎?什麼是SHA-256?以及如何在Java中創建它?
回答
Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1))
是一個WA y將字節值轉換爲非常寬的字符串,顯示字節的十六進制值。看看String's Javadoc page將有所幫助。
0x100
和substring(1)
的組合確保字節值<小於十六進制數(也就是說,十六進制中的0到F)也表示爲兩個字符。
順便說一句:
String.format("%02x",byteData[i])
不完全一樣,並且可能被認爲更具可讀性,尤其是通過誰是用來C的printf風格的格式字符串的人。
最後,爲什麼(byteData[i] & 0xff)
?有關詳細說明,請參見here:
它的工作原理,因爲Java將執行擴大轉換爲int,使用 符號擴展,所以不是一個消極的字節,你將有一個負 INT。用0xff掩碼將只留下較低的8位,從而使 的數字再次爲正數(以及您最初的計劃)。
你能舉一個字節轉換爲十六進制的例子嗎? –
這正是'Integer.toString'和我的'String.format'建議所做的,所以我不明白你的問題? – fvu
現在我明白如何將其轉換爲十六進制,但我還有一個問題。是&0xff重要嗎?不總是等於8位?那麼爲什麼我們需要確保它是8位?謝謝! –
SHA-256被稱爲散列算法,其目的是簡單的:它需要的任何數據,併產生一個唯一的系列字節來表示它的。沒有辦法扭轉這個過程,並且沒有已知的SHA-256哈希實例是不唯一的。
所討論的代碼行的目的是生成最終SHA-256輸出的一個字符。 Java爲您提供原始數據(一個字節數組),我們通常將其轉換爲十六進制來表示它爲一個字符串。該代碼行非常複雜,所以我將分別介紹每個部分的作用。
sb.append();
正在進行輸入並將其添加到存儲在StringBuilder中的結果中。
Integer.toString();
注意到一個數,表示它作爲文字串
byteData[i] & 0xff
選擇散列數據的當前字節,並且使用按位與運算用0xff的(所以在字節的每個比特,如果在0xff的對應的位是相同的,輸出是1,如果不輸出是0。
string.substring(1);
輸出字符串的第一個字符之後開始。
你的答案也很好,但你沒有解釋「0x100」是什麼。我感謝您的幫助。 –
- 1. 什麼是動畫以及如何創建它?
- 2. 什麼是SS_X_JSESSIONID以及何時創建?
- 3. 什麼是API Web服務,您如何創建它們以及爲什麼?
- 4. 什麼是(void(**)())以及如何typedef它?
- 5. 什麼是SVN中的pre-revprop-change鉤子,以及如何創建它?
- 6. JavaScript中的內存泄漏:它們是什麼,如何識別它們以及如何創建它們
- 7. 什麼是NULL值,以及如何在SQLite中處理它們
- 8. 什麼是深度鏈接,以及如何爲App Store創建它?
- 9. 在Java API中分組是什麼意思以及如何使用它?
- 10. 什麼是進口在Java類中的順序以及如何解決它
- 11. EJB。什麼是它爲什麼存在以及它如何工作?
- 12. 什麼是Android以及他們爲什麼創建新的VM?
- 13. Plist:它是什麼以及如何使用它
- 14. ObjectSpace - 它是什麼以及人們如何使用它?
- 15. 什麼是關鍵字密度以及如何在PHP中創建腳本?
- 16. mac中的sh進程是什麼以及如何殺死它
- 17. AngularJs Material中的defaultIconSet()是什麼以及我如何使用它?
- 18. WMI - 它究竟如何工作?什麼是創建WmiApSrv.exe服務以及它如何發送消息?
- 19. activeandroid中的mId是什麼以及它何時可以爲null?
- 20. 在java中「創建」是什麼意思
- 21. NPTL:什麼是MULTIPLE_THREADS_OFFSET以及它是如何設置
- 22. 什麼是合同類以及它是如何使用的
- 23. 什麼是Flash .SWC文件以及它是如何使用的?
- 24. 什麼是Ext.Component.initialConfig,它做了什麼,以及在什麼情況下使用它?
- 25. 爲什麼XSD.EXE創建兩個.XSD文件以及如何使用它們?
- 26. django,什麼是related_name?以及如何創建共享列以跨項目使用?
- 27. 創建符號鏈接以及如何在EngineYard中創建它的重要性
- 28. 爲什麼發生ArrayIndexOutOfBoundsException以及如何在Android中避免它?
- 29. 這個Perl是什麼意思,以及如何將它翻譯成Java?
- 30. 什麼是dSYM以及如何使用它? (iOS SDK)
https://en.wikipedia.org/wiki/Cryptographic_hash_function#Applications –
SHA-256與將數字轉換爲十六進制無關。 –
SHA 256是一種哈希算法。但是,嚴肅地說:如果你不知道這是什麼意思,忘記使用它。通常情況下,您需要哈希和密碼以達到某種「安全性」級別。但這不是初學者的話題。換句話說:就這些問題詢問這些問題意味着你最好留意其他要研究的主題。 – GhostCat