Метод decodeHex не найден на устройстве, но работает на эмуляторе - PullRequest
0 голосов
/ 12 июня 2019

Я работаю над проектом с RSA-шифрованием, и мне нужно использовать метод Apache commons-codec, который:

  • Hex.encodeHex (byte [])
  • Hex.decodeHex (String)

Оба метода работают нормально на эмуляторе Android, но он вернет NoSuchMethodError на устройстве

public String RSADecrypt(final String message) {
        try {
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.DECRYPT_MODE, getPrivateKey());
            byte[] decryptedBytes = cipher.doFinal(Hex.decodeHex(message));
            return new String(decryptedBytes);
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (DecoderException e) {
            e.printStackTrace();
        }
        return "";
    }
java.lang.NoSuchMethodError: No static method decodeHex(Ljava/lang/String;)[B in class Lorg/apache/commons/codec/binary/Hex; or its super classes (declaration of 'org.apache.commons.codec.binary.Hex' appears in /system/framework/org.apache.http.legacy.boot.jar)
  • Мой эмулятор работает на Pie, Oreo & Nougat
  • Мое устройство работает на нуге и зефире

1 Ответ

1 голос
/ 12 июня 2019

Некоторые версии Android содержат более старую версию библиотеки Apache commons-codec (1.3), где метод decodeHex(String) еще не существовал. Попробуйте позвонить decodeHex(char[]) вместо этого. То есть измените свой код следующим образом:

byte[] decryptedBytes = cipher.doFinal(Hex.decodeHex(message.toCharArray()));

Это должно работать с commons-codec v1.3.

...