Я не могу преобразовать закодированную строку base64 в шестнадцатеричную строку в Android? - PullRequest
0 голосов
/ 12 октября 2018

Я использую AES (Rijndael) метод шифрования для шифрования строки.Используемое преобразование ECB_PKCS5PADDING.Он вернет закодированную строку base64.Я расшифровал строку с помощью base64 и преобразовал в hex с помощью функции.Фрагменты кода прилагаются ниже

private void encrptString() 
 {
    sample = "<xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    String encrypt = Encoder.BuilderAES()
            .message(sample)
            .method(AES.Method.AES_ECB_PKCS5PADDING)
            .key("xxxxxxxxxxxxxx")
            .keySize(AES.Key.SIZE_128)
            .encrypt();

    System.out.println("encrypt"+encrypt);

    String stringFromBase = new String(Base64.decode(encrypt,Base64.DEFAULT));
    System.out.println("base64"+stringFromBase.trim());



   String hex= null;
   try {
       hex = toHex(stringFromBase);
   } catch (UnsupportedEncodingException e) {
       e.printStackTrace();
   }
   Toast.makeText(this, hex, Toast.LENGTH_SHORT).show();
   System.out.println("hex"+hex.trim());


   }

public String toHex(String arg) throws UnsupportedEncodingException {
    return String.format("%040x", new BigInteger(1, arg.getBytes("UTF-8")));


}

base64 Строка ввода:. 1011

1013 * O3Kmyftikp0lY / 8SVWMiLFCn9sdQX7HauqdLZXcE + jkVcZH7kfPD / jSLIC2wlP1iQTaiynoaW8A7L1INEYunkmCWT2eVwumwouHVT7d5Kq / sqEcB9 / 9pyyAuSjrQxtCgJlHm7dlvt0lVEHD2pHnEAhZTRtuuy6b 8MNI7W4jLn + / ZNEqZxdJll26a52D7ceFv

Ожидаемый результат:

3b72a6c9fb62929d2563ff125563222c50a7f6c7505fb1dabaa74b657704fa391571 91fb91f3c3fe348b202db094fd624136a2ca7a1a5bc03b2f520d118ba79260964f67 95c2e9b0a2e1d54fb7792aafeca84701f7ff69cb202e4a3ad0c6d0a02651e6edd96fb 749551070f6a479c402165346dbaecba6fc30d23b5b88cb9fe fd9344a99c5d265976e9ae760fb71e16f

Я получаю этот выход:

3b72efbfbdefbfbdefbfbd62efbfbdefbfbd2563efbfbd125563222c50efbfbdefbfbd efbfbd505fefbfbddabaefbfbd4b657704efbfbd391571efbfbdefbfbdefbfbdefbfbd efbfbd34efbfbd202defbfbdefbfbdefbfbd624136efbfbdefbfbd7a1a5befbfbd3b2f 520d11efbfbdefbfbdefbfbd60efbfbd4f67efbfbdefbfbde9b0a2efbfbdefbfbd4fef bfbd792aefbfbdefbfbd4701efbfbdefbfbd69efbfbd202e4a3aefbfbdefbfbdd0a026 51efbfbdefbfbdefbfbd6fefbfbd49551070efbfbd79efbfbd02165346dbaecba6efbf bd30efbfbd3b5befbfbdcb9fefbfbdefbfbd344aefbfbdefbfbdefbfbd65efbfbd6eef bfbdefbfbd60efbfbd

1031 *

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Я бы оставил декодированный Base64 как byte[] и закодировал бы это:

    String b64 = "O3Kmyftikp0lY/8SVWMiLFCn9sdQX7HauqdLZXcE+jkVcZH7kfPD/ jSLIC2wlP1iQTaiynoaW8A7L1INEYunkmCWT2eVwumwouHVT7d5Kq /sqEcB9/9pyyAuSjrQxtCgJlHm7dlvt0lVEHD2pHnEAhZTRtuuy6b 8MNI7W4jLn+/ZNEqZxdJll26a52D7ceFv";

    StringBuilder hexStringBuilder = new StringBuilder();
    for (byte b : Base64.decode(b64, Base64.DEFAULT)) {
        hexStringBuilder.append(String.format("%02x", b));
    }

    String hex = hexStringBuilder.toString()
0 голосов
/ 12 октября 2018

Вы должны выполнить base64-декодирование в байтовый массив (byte[]) и затем шестнадцатеричное кодирование байтового массива в строку.

...