PDF使用Crypto ++进行AES加密后损坏

时间:2016-02-21 08:57:52

标签: android c++ android-ndk aes crypto++

我正在尝试使用android app中的crypto ++库的AES算法加密pdf。该程序采用pdf文件并创建一个新的加密文件。在解密时,它需要一个加密文件,并创建一个新的解密文件。

但问题是,当我加密pdf时,原始文件已损坏。其他应用程序无法打开原始文件。解密后的一个也被破坏了。但.txt文件在加密和解密方面都能很好地工作,原始文件也可以。

这是代码......

#include <jni.h>
#include <iostream>
#include <fstream>
#include "aes.h"
#include "files.h"
#include "modes.h"

using namespace std;
using namespace CryptoPP;

#ifdef __cplusplus
extern "C" {
#endif

byte key[AES::DEFAULT_KEYLENGTH];
byte iv[AES::BLOCKSIZE];


void encrypt(char* inputFile, char* out) {
    AES::Encryption aesEncryption(key, AES::DEFAULT_KEYLENGTH);
    CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv);

    FileSource f(inputFile, true, new StreamTransformationFilter(cbcEncryption, new FileSink(out)));
}

void decrypt(char* in, char* out) {
    AES::Decryption aesDecryption(key, AES::DEFAULT_KEYLENGTH);
    CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv);

    FileSource f(in, true, new StreamTransformationFilter(cbcDecryption, new FileSink(out)));
}

jstring Java_com_onik_encryptedpdf_MainActivity_test(JNIEnv* env, jobject obj) {
    string ret = "NDK OK 5 Encryption Complete!";

    memset(key, 0x00, AES::DEFAULT_KEYLENGTH);
    memset(iv, 0x00, AES::BLOCKSIZE);


    //encrypt("sdcard/t.txt", "sdcard/tEnc.enc");
    decrypt("sdcard/tEnc.enc", "sdcard/tDec.txt");

    return env->NewStringUTF(ret.c_str());
}

#ifdef __cplusplus
}
#endif

这里的问题是什么......先谢谢。 :)

0 个答案:

没有答案