2017-03-17 171 views
0

我想計算一個簡單的程序,它將執行一個MD5來散列我輸入的二進制值。MD5二進制字符串轉換爲字節數組

我已經試過谷歌,所有程序陳述是哈希字符串。 這不是我要找的。我想散列二進制,結果會以十六進制形式給我。

以下是我試過的代碼,但是, 在返回語句return hash處有錯誤,它聲明byte []不能轉換爲字符串。

有人可以幫我解決這個問題嗎?您的幫助將不勝感激。 我是編程密碼算法的新手。

import java.security.*; 
import java.io.FileInputStream; 
import java.io.UnsupportedEncodingException; 
import java.math.BigInteger; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class JavaApplication1 { 

    public static String getMD5(byte[] plaintext) throws Exception{ 

     //init hash algorithm 
     MessageDigest md = MessageDigest.getInstance("MD5"); 

     //compute hash 
     byte[] hash = md.digest(plaintext); 


     //display hash in hex 
     System.out.println(tohex(hash)); 
     return hash; 

    } 

    public static void main(String[] args) throws NoSuchAlgorithmException { 
     System.out.println(getMD5(0111001101101000011001)); 
    } 

    public static String tohex(byte[] bytes) { 
     StringBuilder hexString = new StringBuilder(); 

     for (int i = 0; i < bytes.length; i++) { 
      String hex = Integer.toHexString(0xFF & bytes[i]); 
      if (hex.length() == 1) { 
       hexString.append('0'); 
      } 
      hexString.append(hex); 
     } 

     return hexString.toString(); 
    } 
} 
+0

因爲'0111001101101000011001'沒有什麼有效的Java,你真的希望它是什麼?一個二進制編碼的整數?還有別的嗎? – fvu

+0

binary> hash> hex – moon

+0

是的,但二進制什麼?在你的例子中是0和1代表個別位(意味着給出的是22位數)? – fvu

回答

1

我看到了一些問題,在您的實現,例如:

  • 不能傳遞到getMD5功能以這種方式一個字節的字符串。
  • getMD5返回String但您試圖返回一個字節數組。如果你想結果爲十六進制字符串你應該改變return hashreturn tohex(hash);
  • getMD5聲明throws Exception這是錯誤的,太普通了,你應該聲明throws NoSuchAlgorithmException

我建議將二進制字符串轉換的字節數組中這樣說:

String b = "0111001101101000011001"; 
byte[] bval = new BigInteger(b, 2).toByteArray(); 
System.out.println(getMD5(bval)); 

這是一個較短的版本:

import java.math.BigInteger; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class JavaApplication1 { 

    public static void main(String[] args) throws NoSuchAlgorithmException { 
     String b = "0111001101101000011001"; 

     byte[] bval = new BigInteger(b, 2).toByteArray(); 

     MessageDigest md = MessageDigest.getInstance("MD5"); 
     byte[] hash = md.digest(bval); 

     for (byte b1 : hash) { 
     System.out.print(String.format("%02X", b1)); 
     } 
    } 
} 
+0

有沒有例子?返回散列也有錯誤。對不起,我對這樣的程序 – moon

+0

不熟悉,因此,該程序將我輸入的二進制值和結果散列到十六進制中,對吧? – moon

+0

@moon只是將'getMD5'函數的返回值更改爲'return tohex(hash);' – freedev

相關問題