0

如何将此 byte[] 转换为 String :

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");

谢谢。

4

3 回答 3

2

为了将字节数组解码为 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];
        }
    }
}

上述代码的输出是:

转为 UTF-8 字符串:d��^�
转 Base64 字符串:ZBkchuZe/eY=
返回 UTF-8 字符串:d��^�</pre>

因此,如果您想在 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��^�</pre>

您应该能够将$key变量传递到您的 PHP 加密方法中。

于 2013-02-13T11:58:08.860 回答
0

以你这样做的方式,海事组织毫无意义。您正在创建一个以 byte[] 作为参数的新字符串。我不认为该函数应该解析。所以你最终得到的是很多垃圾。但是一点谷歌搜索让我明白了这一点: http ://www.mkyong.com/java/how-do-convert-byte-array-to-string-in-java/

于 2013-02-13T11:19:23.700 回答
0

m_key.getEncoded() 会给你想要的结果。

Javadocs - SecretKeySpec

如果没有,您必须识别用于编码的密钥提供程序(这导致您现在拥有的字节数组)并解码。

于 2013-02-13T11:38:50.127 回答