2013-02-13 32 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

如果没有,你必须确定这是用于编码(导致你现在拥有的字节数组中)和解码的主要供应商。

相关问题