如何在java中编辑SHA256

时间:2017-08-15 08:38:47

标签: java hash sha256

我很难在标题中解释,但我想创建一个程序,它接受某些文本,比如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。这有一个前导零,但我想要两个。我不知道下一步该做什么,但我相信我已经正确设置了一切。每次将yeah加1时,我将如何创建while或if语句?这是最好的方式吗?

问题在于,当我创建一个while循环时,sha256哈希不会更新,因此它始终打印0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd92983 1ef5。我想知道我做错了什么,想看看其他人会怎么做。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

public class Sha {

    private static String byteArrayToHexString(byte[] array) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < array.length; i++) {
            sb.append(Integer.toString((array[i] & 0xff) + 0x100, 16).substring(1));
        }
        return sb.toString();
    }

    public static void main(String[] args) throws Exception {

        final int MAX_PASS_ATTEMPTS = 40000;

        final String PASS_PREFIX = "previousblock14currentblock";

        MessageDigest md = MessageDigest.getInstance("SHA-256");

        for (int i = 0; i < MAX_PASS_ATTEMPTS; i++) {
            String password = PASS_PREFIX + i;

            md.reset();
            md.update(password.getBytes());
            byte[] hash = md.digest();

            //System.out.println(byteArrayToHexString(hash));

            if (hash[0] == 0 && hash[1] == 0) {
                System.out.println("Password: " + password);
                System.out.println("Hash: " + byteArrayToHexString(hash));
                return;
            }
        }       

        System.out.println("No luck after " + MAX_PASS_ATTEMPTS + " tries.");
    }
}

顺便说一句,this是了解Java控制流语句的重要资源。