2011-11-04 48 views
0

1)如果在PHP中我有了這個代碼:SHA-256拼接字節字符串+ +字節

$var = "\x00\x23\x21\x11"; 

如何我應該寫在Java的這種說法?

2)當我需要連接3種類型的變量時,這兩個字節和一個字符串,並得到SHA-256摘要。

String all = varbyte1+varstr1+varbyte2; 
MessageDigest md = MessageDigest.getInstance("SHA-256"); 
byte[] digest = md.digest(all.getBytes("UTF-8")); 
String hash = String.format("%0" + (digest.length*2) + "X", new BigInteger(1, digest)); 

這是正確的嗎?

回答

-1

第1部分我可以回答。

$var = "\\x00\\x23\\x21\\x11";

+0

這是爲PHP,但在Java中,如果我有字符串var =「\\ x00 \\ x23 \\ x21 \\ x11」;並打印它,我沒有得到相同的PHP代碼輸出! :D這是一個原因,在PHP中,變量不需要類型! :| – antonioz

2

你就錯了,因爲如果你看着你的all你可能會注意到:

String x = "meh"; 
    byte b = 39; 
    byte c = 99; 
    String y = b + x + c ; 
    System.out.print(y); 

打印39meh99。我建議使用ByteArrayOutputStream並將三部分寫入stream.write

在一般情況下,你應該習慣這樣的事實:字符串在Java中沒有字節數組,因爲charbyte之間的區別很穩健執行,所以你總是應該考慮哪些編碼您使用在兩者之間轉換。

+0

好的。但如果我想將一個mac地址變成一個變量在php我做 $ var =「\ x00 \ x01 \ x02 \ x03 \ x04 \ x05」; 什麼類型的變量應該在JAVA中實例化,以及如何初始化它? – antonioz

+0

字節數組! byte [] mac =新的字節[0x00,0x01,0x02,0x03,0x04,0x05]。 – themel

+0

這條語句產生錯誤^ _^ – antonioz