Qt 利用openssl中的ase对文件进行加、解密

首先到官网下载openssl库,也可以到下面地址下载
链接:https://pan.baidu.com/s/1iNCsr3LR_j-qHdBh3bshEw   提取码:akr2

然后在.pro文件中添加代码
LIBS += -L"D:/OpenSSL/lib" -llibcrypto       //库文件名及其路径
INCLUDEPATH += $$quote(D:/OpenSSL/include/)   //头文件路径
//INCLUDEPATH += D:/OpenSSL/include/

接着,在main.cpp文件实现以下代码

#include "mainwindow.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
   
static unsigned char key[AES_BLOCK_SIZE*2] = "1wradfr4e3fefefad4545454h6thrsf";   //秘钥
   
int aes256_encrypt(char* str_in, char* out)   //加密
{
   int i;
   int len;
    AES_KEY aes;
   unsigned char iv[AES_BLOCK_SIZE] = {0};
   if (!str_in || !out)
        return 0;
    len = strlen(str_in);
    for (i = 0; i < 16; ++i)
         iv[i] = i+32;
   if (AES_set_encrypt_key((unsigned char*)key, 256, &aes) < 0){
        return 0;
    }
    AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_ENCRYPT);
   return 1; }

int aes256_decrypt(char* str_in, char* out)   //解密 
{
    int i;
    int len=16;
    AES_KEY aes;
    unsigned char iv[AES_BLOCK_SIZE] = {0};

     if (!str_in || !out)
         return -1;

	//en = strlen(str_in);
     //确保里面的内容加密解密一样
     for (i = 0; i < 16; ++i)
        iv[i] = i+32;

     if (AES_set_decrypt_key((unsigned char*)key, 256, &aes) < 0)
     {
        return -1;
     }

    AES_cbc_encrypt((unsigned char*)str_in, (unsigned char*)out, len, &aes, iv, AES_DECRYPT);
    return 0; 
}

int main(int argc, char *argv[]) 
{
   QApplication a(argc, argv);
   MainWindow w;
   w.show();

   char in[16]={0}, out[16]={0}, buf[16]={0};

   QFile read_file("D:/gui/main.cpp");   //被加密文件
   QFile write_file("D:/gui/com.cpp");   //解密后的文件
   if(!read_file.open(QIODevice::ReadOnly) || !write_file.open(QIODevice::WriteOnly))
   {
       qDebug() << "open fail";
       return -1;
   }

   int len=0;
   while(!read_file.atEnd())  //判断文件是否读取完毕
   {
   		read_file.read(in,15);
       	in[15] = strlen(in);   //前15字节表示数据内容,最后一字节表示前面数据内容的有效长度

      	aes256_encrypt(in, out);  //加密
       	aes256_decrypt(out, buf);  //解密
       	write_file.write(buf, buf[15]);  //将解密后的数据写入另一文件

       	memset(in, 0, sizeof(in));
       	memset(buf, 0, sizeof(buf));
       	memset(out, 0, sizeof(out));
   }

   read_file.close();
   write_file.close();
   
   return a.exec();
}
最后,可利用Beyond Compare 对比这两个文件是否完全一样!!!


忘记参考哪些大佬的博文了,没能将他们的博文地址写下来,在此对他们说声抱歉!!!!

你可能感兴趣的:(Qt,openssl,qt)