我从书中读取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. PHP库 - 它们是什么,以及如何创建一个
- 3. 如何以及为什么在创建
- 4. 什么是SS_X_JSESSIONID以及何时创建?
- 5. 什么是API Web服务,您如何创建它们以及为什么?
- 6. 什么是int foo [] = {1200,100}以及如何在Swift中重新创建它?
- 7. 什么是(void(**)())以及如何typedef它?
- 8. 什么是C#中的自定义值类型,以及如何创建它们?
- 9. Symfony中的助手是什么以及我们如何创建它们?
- 10. 什么是SVN中的pre-revprop-change钩子,以及如何创建它?
- 11. AnonymousSafeObservable的目的是什么以及何时/为什么创建它?
- 12. JavaScript中的内存泄漏:它们是什么,如何识别它们以及如何创建它们
- 13. Android:这些菜单是什么以及如何构建它们?
- 14. java中的随机测试 - 它是什么以及如何实现它?
- 15. 什么是NULL值,以及如何在SQLite中处理它们
- 16. 什么是深度链接,以及如何为App Store创建它?
- 17. Arduino期望什么目录(文件夹),以及它们是如何创建的?
- 18. 在Java API中分组是什么意思以及如何使用它?
- 19. 什么是进口在Java类中的顺序以及如何解决它
- 20. 什么是mysql索引,以及如何创建索引?
- 21. 如何创建网络协议以及规范是什么?
- 22. EJB。什么是它为什么存在以及它如何工作?
- 23. 如何创建Class <>以及它是如何工作的?
- 24. 什么是Android以及他们为什么创建新的VM?
- 25. typedef void(* MyCallback):它是什么以及如何使用它?
- 26. Magento XMLConnect ...它是什么以及如何使用它?
- 27. ObjectSpace - 它是什么以及人们如何使用它?
- 28. Plist:它是什么以及如何使用它
- 29. jquery fancybox - 它是如何工作的以及它需要什么?
- 30. 如何在openssl中创建sha256指纹
https://en.wikipedia.org/wiki/Cryptographic_hash_function#Applications –
SHA-256与将数字转换为十六进制无关。 –
SHA 256是一种哈希算法。但是,严肃地说:如果你不知道这是什么意思,忘记使用它。通常情况下,您需要哈希和密码以达到某种“安全性”级别。但这不是初学者的话题。换句话说:就这些问题询问这些问题意味着你最好留意其他要研究的主题。 – GhostCat