首页
诗词
字典
板报
句子
名言
友答
励志
学校
网站地图
编程
C++
C语言
C++ Builder
VB
PB
Ruby Rails
perl python
编程
其他开发语言
VBA
VC/MFC
当前位置:
首页
>
教程频道
>
开发语言
>
编程
>
应用AES加密算法
2012-07-22
使用AES加密算法上几天大概了解了一下AES算法,具体的加密算法现在不想很清楚的了解,只是能够拿来用就好了。
使用AES加密算法
上几天大概了解了一下AES算法,具体的加密算法现在不想很清楚的了解,只是能够拿来用就好了。这里有份c++的AES。
Aes.h
#include "Aes.h"#include <stdio.h>//对文件的AES加密操作int FileCrypt();//对文件的AES解密操作int FileDeCrypt();int main(){FileCrypt();FileDeCrypt();return 0;}int FileCrypt(){//CreateFile获得文件内核句柄DWORD FileSize;HANDLE hFile = CreateFile(L"D:\\1.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){printf("无效的句柄,尝试重新打开\n");}//获取文件大小FileSize = GetFileSize(hFile, NULL);if (FileSize == INVALID_FILE_SIZE){printf("获取文件大小出错,请重新尝试\n");}//动态分配待加密字符串char * Buff1 = (char*) malloc(sizeof(char) * FileSize);memset(Buff1, 0, sizeof(Buff1));BOOL b;DWORD dwSizeOfRead = 0;b = ReadFile(hFile, Buff1, FileSize, &dwSizeOfRead, NULL);//读取文件内容if ((dwSizeOfRead != FileSize) || (!b)){printf("读取文件出错\n");}//字符串补位操作int add;if (FileSize / 16 == 0)add = 16;elseadd = 16 - FileSize % 16;//动态分配补位后待加密字符串char * Buff2 = (char*) malloc(sizeof(char) * (FileSize + add));memset(Buff2, 0, sizeof(Buff2));//进行补齐for(int i = 0; i < FileSize + add; i++){if(i < FileSize)Buff2[i] = Buff1[i];elseBuff2[i] = (char)add;}//加密操作Aes aes(16, (unsigned char *)"1234567812345678");//将缓存区里面的数据加密,放入新的缓存区里面HANDLE hNewFile = CreateFile(L"D:\\1(加密).txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);DWORD count = 0;char Temp1[16];char Temp2[16];while (count <= FileSize){memset(Temp1, 0 ,sizeof(Temp1));memset(Temp2, 0, sizeof(Temp2));for (int i = 0; i <=15; i++)Temp1[i] = Buff2[i + count];aes.Cipher((unsigned char*)Temp1, (unsigned char*)Temp2);//将新缓存区的数据写入新的文件里面DWORD dwSizeOfWrite = 0;WriteFile(hNewFile, Temp2, sizeof(Temp2), &dwSizeOfWrite, 0);SetFilePointer(hNewFile, 0, NULL, FILE_END);count +=16;}CloseHandle(hFile);CloseHandle(hNewFile);return 0;}int FileDeCrypt(){//CreateFile获得文件内核句柄DWORD FileSize;HANDLE hFile = CreateFile(L"D:\\1(加密).txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (hFile == INVALID_HANDLE_VALUE){printf("无效的句柄,尝试重新打开\n");}//获取文件大小FileSize = GetFileSize(hFile, NULL);if (FileSize == INVALID_FILE_SIZE){printf("获取文件大小出错,请重新尝试\n");return 1;}if (FileSize % 16 != 0){printf("加密文件大小有误,请检查加密文件");return 1;}//动态分配内存char* Buff1 = (char*)malloc(sizeof(char) * FileSize);char* Buff2 = (char*)malloc(sizeof(char) * FileSize);BOOL b;DWORD dwSizeOfRead = 0;b = ReadFile(hFile, Buff1, FileSize, &dwSizeOfRead, NULL);//读取文件内容if ((dwSizeOfRead != FileSize) || (!b)){printf("读取文件出错\n");return 1;}//解密操作Aes aes(16, (unsigned char *)"1234567812345678");//将缓存区里面的数据加密,放入新的缓存区里面HANDLE hNewFile = CreateFile(L"D:\\1(解密).txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);DWORD count = 0;char Temp1[16];char Temp2[16];for (int j = 0; j < FileSize / 16; j++){memset(Temp1, 0 ,sizeof(Temp1));memset(Temp2, 0, sizeof(Temp2));for (int i = 0; i <=15; i++)Temp1[i] = Buff1[i + count];aes.InvCipher((unsigned char*)Temp1, (unsigned char*)Temp2);if (j == FileSize / 16 - 1) //最后一次写文件{int add = (int)Temp2[15];//获得最后一次要写入的16-add个字节DWORD dwSizeOfWrite = 0;WriteFile(hNewFile, Temp2, sizeof(char) * (16 - add), &dwSizeOfWrite, 0);SetFilePointer(hNewFile, 0, NULL, FILE_END);}else{//将新缓存区的数据写入新的文件里面DWORD dwSizeOfWrite = 0;WriteFile(hNewFile, Temp2, sizeof(Temp2), &dwSizeOfWrite, 0);SetFilePointer(hNewFile, 0, NULL, FILE_END);count +=16;}}CloseHandle(hFile);CloseHandle(hNewFile);return 0;}
查看更多
下一篇
本文网址:
https://www.reader8.net/jiaocheng/20120722/1896203.html
读书人精选
热点排行
maven 项目平添Maven Dependencies Libr
java类静态域、块,非静态域、块,结构函
Golang的slice圈套
Spring2 兑现AOP编程的两种实现方法
树的底层实现(下)
多线程程序的评量基准
struts2札记之第七讲
jquery 用ID取某个元素上的某个ID元素
聚合总结
maven 中引来依赖的包