AES шифрование. QR-код

390
14 июля 2018, 01:20

Есть задача: из зашифрованнх данных с помощью алгоритма шифрования (AES например) сгенерирован QR-код. Нужно создать Android-приложение для считывания этих данных и дешифрования(чтобы на выходе получали дешифрованную строку).

    import org.apache.commons.codec.binary.Base64;
    import javax.crypto.Cipher;
    import javax.crypto.spec.IvParameterSpec;
    import javax.crypto.spec.SecretKeySpec;
public class AESJava {
    public static byte[] encrypt(byte[] data, byte[] key, byte[] ivs) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
            byte[] finalIvs = new byte[16];
            int len = ivs.length > 16 ? 16 : ivs.length;
            System.arraycopy(ivs, 0, finalIvs, 0, len);
            IvParameterSpec ivps = new IvParameterSpec(finalIvs);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivps);
            return cipher.doFinal(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    public static byte[] decrypt(byte[] data, byte[] key, byte[] ivs) {
        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
            byte[] finalIvs = new byte[16];
            int len = ivs.length > 16 ? 16 : ivs.length;
            System.arraycopy(ivs, 0, finalIvs, 0, len);
            IvParameterSpec ivps = new IvParameterSpec(finalIvs);
            cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivps);
            return cipher.doFinal(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

Метод для дешифрования:

public static String decryptMethod(String s){
    byte[] bytes = Base64.decodeBase64(s);
    String encryptionDecryptionKey = "1234567812345678";
    String ivs = "12345678";
    byte[] decryptedData = decrypt(bytes, encryptionDecryptionKey.getBytes(), ivs.getBytes());
    return new String(decryptedData);
}

метод из MainActivity:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RC_BARCODE_CAPTURE) {
        if (resultCode == CommonStatusCodes.SUCCESS) {
            if (data != null) {
                Barcode barcode = data.getParcelableExtra(BarcodeCaptureActivity.BarcodeObject);
                statusMessage.setText(R.string.barcode_success);
                //
                barcodeValue.setText(AESJava.decryptMethod(barcode.displayValue));
                //
                //barcodeValue.setText(barcode.displayValue);
                Log.d(TAG, "Barcode read: " + barcode.displayValue);
            } else {
                statusMessage.setText(R.string.barcode_failure);
                Log.d(TAG, "No barcode captured, intent data is null");
            }
        } else {
            statusMessage.setText(String.format(getString(R.string.barcode_error),
                    CommonStatusCodes.getStatusCodeString(resultCode)));
        }
    }
    else {
        super.onActivityResult(requestCode, resultCode, data);
    }
}

готовый пример QR-сканера взял здесь: https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader/app/src/main/java/com/google/android/gms/samples/vision/barcodereader

при запуске выдаёт ошибку. А по идее должен возвращать дешифрованные данные.

READ ALSO
Кто может помочь, что за ошибка?

Кто может помочь, что за ошибка?

Кто может помоч, что за ошибка?

255
Запись числа в формате Long

Запись числа в формате Long

День добрыйВопрос такого содержания использую библиотеку apache poi для формирования Excel отчета

416
Посимвольный консольный ввод через Stream Java 8

Посимвольный консольный ввод через Stream Java 8

Как можно преобразовать консольный ввод Systemin в Stream из символов

313
Элементарный пример лямбда выражения

Элементарный пример лямбда выражения

В книге Шилдта приводится элементарный пример использования лямбда-выражения, где метод

271