2013-02-13 21 views
0

我怎麼能這樣的byte []轉換成字符串:字節[]爲String {100,25,28,-122,-26,94,-3,-26}

byte[] mytest = new byte[] {100,25,28,-122,-26,94,-3,-26}; 

我得到這個:"d��^�"當我使用:

new String(mytest , "UTF-8") 

這裏是創作的關鍵代碼的Java:

m_key = new javax.crypto.spec.SecretKeySpec(new byte[] {100,25,28,-122,-26,94,-3,-26}, "DES"); 

感謝。

+12

什麼是想要的結果? – 2013-02-13 11:03:16

+0

我希望這個字節數組是加密的值... – Anil 2013-02-13 11:07:07

+1

輸入中ASCII碼非控制代碼範圍100和94中的唯一字節是正確打印的。 – 2013-02-13 11:07:12

回答

1

爲了將字節數組解碼爲類似ASCII的字節數組,您需要知道它的原始編碼。否則,您需要將其視爲二進制文件。

注意:Base64旨在跨網絡傳輸二進制數據。

我會建議Base64編碼你的字節數組。然後在您的PHP代碼中將Base64字符串解碼爲UTF-8字符串。

在Java中,這裏是如何爲Base64編碼的字節數組,然後回解碼爲UTF-8:

import org.apache.commons.codec.binary.Base64; 

public class MyTest { 
    public static void main(String[] args) throws Exception { 
     byte[] byteArray = new byte[] {100,25,28,-122,-26,94,-3,-26}; 
     System.out.println("To UTF-8 string: " + new String(byteArray, "UTF-8")); 

     byte[] base64 = Base64.encodeBase64(byteArray); 
     System.out.println("To Base64 string: " + new String(base64, "UTF-8")); 

     byte[] decoded = Base64.decodeBase64(base64); 
     System.out.println("Back to UTF-8 string: " + new String(decoded, "UTF-8")); 

     /* the decoded byte array is the same as the original byte array */ 
     for (int i = 0; i < decoded.length; i++) { 
      assert byteArray[i] == decoded[i]; 
     } 
    } 
}

從上面的代碼的輸出是:

To UTF-8 string: d��^� 
To Base64 string: ZBkchuZe/eY= 
Back to UTF-8 string: d��^�

所以,如果你希望在您的PHP代碼中使用相同的二進制數據,將Base64字符串剪切並粘貼到您的PHP代碼中並將其解碼回UTF-8。事情是這樣的:

<?php 
$str = 'ZBkchuZe/eY='; 
$key = base64_decode($str); 
echo $key; 
?>

我不代碼PHP,但你應該能夠使用這種方法來解碼的Base64: http://php.net/manual/en/function.base64-decode.php

上面的代碼應該回顯原始二進制數據作爲UTF- 8(儘管有趣的人物)。問題的關鍵是,在$key變量看起來很有趣的字符串代表您的Java字節數組中有相同的二進制數據:

d��^�

你應該能夠在$key變量傳遞到PHP的加密方法。

+0

非常感謝,它的工作: $ str ='ZBkchuZe/eY ='; $ key = base64_decode($ str); – user2068058 2013-02-13 13:14:50

0

會m_key.getEncoded()給你想要的結果。

的Javadoc - SecretKeySpec

如果沒有,你必須確定這是用於編碼(導致你現在擁有的字節數組中)和解碼的主要供應商。

相關問題