2017-08-15 11 views
-1

タイトルで説明するのは難しいですが、特定のテキスト(例:hello0)をsha256でハッシュして2つの先行ゼロがあるかどうかを確認するプログラムを作成したいと思います。そうであれば、ハッシュを印刷します。そうでない場合は、hello1とし、次にhello2とすると、先行する2つのゼロが見つかるまで続きます。あなたはHex format : 0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5を受け取るコードを実行するとjavaで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()); 

} 
} 

:ここで私は、テキストからの私のSHA256ハッシュを作成する方法で見つかったいくつかの方法があります。これには1つの先行ゼロがありますが、私は2つ必要です。私は次に何をすべきかわからないが、私はすべてを正しく設定していると信じている。 yeahを1つ追加するたびに、while文またはif文を作成するにはどうすればよいですか?これが最良の方法でしょうか?

問題は、whileループを作成するとsha256ハッシュが更新されないため、常に0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd92983 1ef5が出力されることです。私は何か間違ったことをしていて、他の人がそれをやり遂げる方法を見たいと思っています。

ご協力いただきありがとうございます。ところで

+0

あなたは基本的にループを作成する方法と、ループ内の整数を増やす方法を尋ねています。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/while.html –

+0

これを使用して、16進文字列に変換します。https://stackoverflow.com/a/41787842/4899193 –

+0

ループの仕組みを理解しています。 haha、問題は私がwhileループを作成するとsha256ハッシュが更新されないので、常に '0a0a30b1031fa60b8fa9478a070b03333df75017fd61c1b1c7e16bd929831ef5'を出力するということです。私は何か間違ったことをしていて、他の人がそれをやり遂げる方法を見たいと思っています。 –

答えて

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コントロールフロー計算書について学ぶための素晴らしいリソースです。

関連する問題