【发布时间】:2017-08-16 00:33:43
【问题描述】:
我很难在标题中解释,但我想创建一个程序,它采用某些文本,比如hello0,在 sha256 中对其进行哈希处理,并查看它是否有两个前导零。如果是这样,打印哈希。如果不是,则设为hello1,然后设为hello2,依此类推,直到找到两个前导零。以下是我发现的一些关于如何从文本创建 sha256 哈希的方法:
import java.security.MessageDigest;
public class sha
{
public static void main(String[] args)throws Exception
{
int yeah = 40;
String password = "previousblock14currentblock" + yeah;
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes());
byte byteData[] = md.digest();
//convert the byte to hex format method 1
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
System.out.println("Hex format : " + sb.toString());
StringBuffer hexString = new StringBuffer();
for (int i=0;i<byteData.length;i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
System.out.println("Hex format : " + hexString.toString());
}
}
当您运行代码时,您会收到Hex format : 0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5。这有一个前导零,但我想要两个。我不知道下一步该做什么,但我相信我设置正确。我将如何创建一个while或if语句,每次将yeah加1?这会是最好的方法吗?
问题是当我创建一个while循环时,sha256哈希不会更新,所以它总是打印0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5。我想知道我是不是做错了什么,想看看别人会怎么做。
感谢您的帮助。
【问题讨论】:
-
所以你基本上是在问如何创建一个循环,以及如何在该循环内增加一个整数,对吧? docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html
-
使用这个转换为十六进制字符串:stackoverflow.com/a/41787842/4899193
-
我了解循环的工作原理哈哈,问题是当我创建一个while循环时,sha256哈希不会更新,所以它总是打印
0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5。我想知道我是不是做错了什么,想看看别人会怎么做。 -
问那个问题,并发布你的循环代码,它不能按照你期望的方式工作。不要只问如何编写循环。