使用预先存在的AES密钥在Java中解密文件

时间:2015-12-14 04:49:54

标签: java android encryption aes

我正在尝试做一些非常简单的事情。我使用AxCrypt在Windows中加密了一个文件。在我的Android应用程序中,我想解密此文件。

AxCrypt生成的128位AES密钥是

CWTr 45Qg eHhy n23d YPC3 DjRi IxUe bt77 TVzQ NtSh HEc=

我认为这是一个Base64编码的字符串,但也许我错了。我用空格将它插入下面的代码中,但我也尝试了没有空格,我得到了相同的结果。

解密文件的java代码如下。解密过程开始但错误输出"最后一个块在解密时不完整"并且无法播放生成的文件(mp4视频)。

Java代码:

       try {
            Utils.logDebug(TAG, "Decrypting!");
            File encfile = new File(getFilesDir() + "/encrypted.axx");
            int read;
            if (!encfile.exists())
                encfile.createNewFile();
            File decfile = new File(getFilesDir() + "/decrypted.mp4");
            if (!decfile.exists())
                decfile.createNewFile();
            FileInputStream encfis = new FileInputStream(encfile);
            FileOutputStream decfos = new FileOutputStream(decfile);
            Cipher decipher = Cipher.getInstance("AES");
            byte key[] = Base64.decode("CWTr 45Qg eHhy n23d YPC3 DjRi IxUe bt77 TVzQ NtSh HEc=", Base64.DEFAULT);
            SecretKey skey = new SecretKeySpec(key, 0, key.length, "AES");
            decipher.init(Cipher.DECRYPT_MODE, skey);
            CipherOutputStream cos = new CipherOutputStream(decfos, decipher);
            while ((read = encfis.read()) != -1) {
                cos.write(read);
                cos.flush();
            }
            cos.close();
            Utils.logDebug(TAG, "Done decrypting!");
        } catch (Exception e) {
            Utils.logError(TAG, "TESTING error: " + e.getMessage());
        }

1 个答案:

答案 0 :(得分:1)

AxCrypt在CBC模式下加密,以及压缩,MAC和许多其他细节。要解密此问题,您需要在此处查看http://www.axantum.com/AxCrypt/faq.html及其发布的源代码。

http://www.axantum.com/AxCrypt/SourceCode.html