我正在尝试使用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
这里的问题是什么......先谢谢。 :)