使用apktool重新编译后,Mac在GCM中的检查失败

时间:2019-12-10 02:09:15

标签: java android encryption bouncycastle apktool

我有一个使用BouncyCastle进行加密和解密的android应用程序。它有一个数据库,其中有一些用BouncyCastle加密的字符串,我需要对其进行反编译并从中进行解密,我正在使用apktool进行此操作,它使我成功地进行了反编译,我正在改变一些代码,并在其中添加log.d进行解密,然后对其进行编译,然后成功编译。现在,当我使用它时,我想尝试从中获取日志,以了解该字符串是什么,它说{ {1}}。我该怎么办?

在该应用程序的代码下方:

要解密的文本:

mac check in GCM failed

用于加密:

IBbdPw==

用于解密:

public static int KeyBitSize = 16;
public static int MacBitSize = 32;
public static int NonceBitSize = 16;
public static String encrypt(String str, byte[] bArr, byte[] bArr2) {
    String str2 = "";
    try {
        byte[] bytes = str.getBytes("UTF-8");
        GCMBlockCipher gCMBlockCipher = new GCMBlockCipher(new AESFastEngine());
        gCMBlockCipher.init(true, new AEADParameters(new KeyParameter(bArr), MacBitSize, bArr2, null));
        byte[] bArr3 = new byte[gCMBlockCipher.getOutputSize(bytes.length)];
        gCMBlockCipher.doFinal(bArr3, gCMBlockCipher.processBytes(bytes, 0, bytes.length, bArr3, 0));
        return Base64.encodeToString(bArr3, 0);
    } catch (UnsupportedEncodingException | IllegalArgumentException | IllegalStateException | DataLengthException | InvalidCipherTextException e) {
        System.out.println(e.getMessage());
        return str2;
    }
}

已更新:

它使用如下代码解密:

public static String decrypt(String str, byte[] bArr, byte[] bArr2) {
    String str2 = "";
    try {
        byte[] decode = Base64.decode(str, 0);
        GCMBlockCipher gCMBlockCipher = new GCMBlockCipher(new AESFastEngine());
        gCMBlockCipher.init(false, new AEADParameters(new KeyParameter(bArr), MacBitSize, bArr2, null));
        byte[] bArr3 = new byte[gCMBlockCipher.getOutputSize(decode.length)];
        gCMBlockCipher.doFinal(bArr3, gCMBlockCipher.processBytes(decode, 0, decode.length, bArr3, 0));
        return new String(bArr3, Charset.forName("UTF-8"));
    } catch (IllegalArgumentException | IllegalStateException | DataLengthException | InvalidCipherTextException e) {
        System.out.println(e.getMessage());
        return str2;
    }
}

当arg_2更改时,应用程序使用其符号键运行

0 个答案:

没有答案