1

文字列を16進数に変換してからバイト配列に変換したい。これまでの私のコードは次のとおりです。

public static void findKey(){

    Cipher cipher;
    SecretKeySpec key;
    byte [] keyBytes;
    byte [] pt;
    byte [] ct;

    String plaintext = "Plaintxt";
    ct = new byte [] {(byte)0x4A, (byte)0xC4, (byte)0x55, (byte)0x3D, (byte)0xB3, (byte)0x37, (byte)0xCA, (byte)0xB3};
    String ptHex = asciiToHex(plaintext);
    System.out.println(ptHex);
    pt = ptHex.getBytes();
    printByteArray(pt);
}

16 進数に変換する私の方法は正常に機能しますが、使用するgetBytesと明らかに 16 バイトに変換されますが、これは私が望んでいるものではありません。それはただの試みでした。これは、文字列を印刷して機能することを確認してから、正しくないバイト配列を印刷した場合の出力です。

506c61696e747874
[  35  30  36  63  36  31  36  39  36  65  37  34  37  38  37  34  ]
-------------Key  Found-------------

50、6c、61 などを取得して、0x50、0x6c などの ct で行ったようにバイト配列に入れたいと考えています。

これは可能ですか?

4

4 に答える 4

2

それはあなたを助けるかもしれません

Byte.parseByte(string, 16);

APIを確認してください

このディスカッションもチェックしてください

于 2013-02-10T04:32:18.687 に答える
2

試す

byte[] getBytes(String s) {
    byte[] a = new byte[s.length() / 2];
    for (int i = 0; i < a.length; i++) {
        a[i] = Byte.parseByte(s.substring(i * 2, i * 2 + 2), 16);
    }
    return a;
}
于 2013-02-10T04:42:58.917 に答える
0

JDK の API を使用するこのワンライナーを使用します。

byte[] array = ByteBuffer.allocate(8).putLong(Long.parseLong(chars, 16)).array();

ここにテストがあります:

import java.nio.ByteBuffer;

public static void main(String[] args) throws Exception {
    String chars= "506c61696e747874";
    byte[] array = ByteBuffer.allocate(8).putLong(Long.parseLong(chars, 16)).array();
    System.out.println(Arrays.toString(array));
}

出力:

[80, 108, 97, 105, 110, 116, 120, 116]

もちろん、ここでの出力は 10 進数ですが、値は正しいです。

于 2013-02-10T14:05:59.777 に答える