如何在android中以编程方式将.db.crypt7转换为.db文件?

时间:2014-08-20 06:17:12

标签: android android-sqlite

Hello Friends,

  • 我想将Whatsapp .db.crypt文件解密为.db文件 android programaticaly不使用shell命令。我搜索过了 但没有得到任何解决方案。请帮帮我。

提前致谢。

3 个答案:

答案 0 :(得分:1)

你不能因为它的编码...... 但是你可以强制它或使用量子计算机解码它... JK

答案 1 :(得分:0)

我认为this帖子(以及整个主题)可以为您提供帮助。

似乎 db.crypt7 文件使用与以前格式不同的加密方案。加密密钥是使用一些用户数据生成的。

答案 2 :(得分:0)

试用此代码

private static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                             + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

public void decryptDatabase(String k, String iv) throws InvalidKeyException, InvalidAlgorithmParameterException,
        NoSuchAlgorithmException, NoSuchPaddingException, IOException {

    File extStore = Environment.getExternalStorageDirectory();
    FileInputStream fis = new FileInputStream(extStore
            + "/WhatsApp/Databases/msgstore.db.crypt7.nohdr");
    FileOutputStream fos = new FileOutputStream(extStore + "/Decrypted.db");

    SecretKeySpec sks = new SecretKeySpec(hexStringToByteArray(k), "AES");
    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
    cipher.init(Cipher.DECRYPT_MODE, sks,
            new IvParameterSpec(hexStringToByteArray(iv)));
    CipherInputStream cis = new CipherInputStream(fis, cipher);
    int b;
    byte[] d = new byte[8];
    while ((b = cis.read(d)) != -1) {
        fos.write(d, 0, b);
    }
    fos.flush();
    fos.close();
    cis.close();
}