【问题标题】:How to edit SHA256 in java如何在java中编辑SHA256
【发布时间】: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哈希不会更新,所以它总是打印0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd92983‌​1ef5。我想知道我是不是做错了什么,想看看别人会怎么做。

感谢您的帮助。

【问题讨论】:

  • 所以你基本上是在问如何创建一个循环,以及如何在该循环内增加一个整数,对吧? docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html
  • 使用这个转换为十六进制字符串:stackoverflow.com/a/41787842/4899193
  • 我了解循环的工作原理哈哈,问题是当我创建一个while循环时,sha256哈希不会更新,所以它总是打印0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5。我想知道我是不是做错了什么,想看看别人会怎么做。
  • 问那个问题,并发布你的循环代码,它不能按照你期望的方式工作。不要只问如何编写循环。

标签: java hash sha256


【解决方案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 控制流语句的绝佳资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2022-11-03
    • 2011-12-12
    • 1970-01-01
    • 2011-08-10
    相关资源
    最近更新 更多