资源简介
Qt异或实现文件加解密.rar
代码片段和文件信息
#include “xor.h“
#include
#include
#include
#include
#include
#include
#include
namespace Crypt
{
using std::min;
using std::bind;
using std::function;
using std::remove_cv;
using std::unique_ptr;
using std::remove_pointer;
using namespace std::placeholders;
typedef struct {
UCHAR Secret;
LPBYTE Sig;
DWORD SizeOfSig;
} KEY *PKEY;
template< typename _Ty >
BOOL IsEmptyString(_Ty &&psz) /* _NOEXCEPT */ { return !psz || !*psz; }
template< typename _Ty >
struct Ptr : public unique_ptr < _Ty function< VOID(typename remove_cv< _Ty>::type *) > >
{
template< typename _Pty > Ptr(_Pty &&_Ptr)
: unique_ptr < _Ty function< VOID(typename remove_cv< _Ty>::type *) > >(
std::forward< _Pty&&>(_Ptr)
[](typename remove_cv< _Ty >::type *h) { if (h && h != INVALID_HANDLE_VALUE) CloseHandle(h); })
{
}
};
namespace Impl /* 内部实现,不要直接调用 */
{
BOOL IsEncoded(_In_ HANDLE h _In_ DWORD SizeOfFile _In_ __readonly KEY *Key)
{
if (Key->SizeOfSig > SizeOfFile)
return FALSE;
if (SetFilePointer(h SizeOfFile - Key->SizeOfSig NULL FILE_BEGIN) ==
INVALID_SET_FILE_POINTER)
return FALSE;
unique_ptr< BYTE function< BOOL(PVOID)>>
p((LPBYTE)HeapAlloc(GetProcessHeap() HEAP_ZERO_MEMORY Key->SizeOfSig)
bind(HeapFree GetProcessHeap() IGNORE _1));
if (!p)
{
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
DWORD Readed = 0;
if (!ReadFile(h p.get() Key->SizeOfSig &Readed NULL) ||
Key->SizeOfSig != Readed)
return FALSE;
SetLastError(ERROR_SUCCESS);
return !memcmp(p.get() Key->Sig Key->SizeOfSig);
}
// 注:
// 此函数只承诺满足基本异常安全等级。若函数失败,文件的其中一部分可能已被修改。
template< typename _Fn >
BOOL Xor(_In_ HANDLE h _In_ DWORD SizeOfFile _In_ __readonly KEY *Key _Fn &&_Func)
{
DWORD Readed = 0;
BYTE Buffer[BUFSIZ] = { 0 };
while (SizeOfFile)
{
if (!ReadFile(h Buffer min((DWORD)sizeof(Buffer) SizeOfFile) &Readed NULL))
return FALSE;
SizeOfFile -= Readed;
for (DWORD i = 0; i < Readed; ++i)
Buffer[i] ^= Key->Secret;
if (SetFilePointer(h 0 - Readed NULL FILE_CURRENT) == INVALID_SET_FILE_POINTER)
return FALSE;
DWORD dw = 0;
while (Readed)
{
if (!WriteFile(h Buffer Readed &dw NULL))
return FALSE;
Readed -= dw;
}
}
return _Func(h Key->Secret Key->Sig Key->SizeOfSig);
}
}
/*
IsEncoded
检查一个文件是否已被使用 KEY 对象编码过。
参数:
NameOfFile,被检查的文件。
Key,测试在文件上的 KEY 对象。
返回值:
已被编码返回非零值,否则返回零。
注:
若函数返回零且 GetLastError 不为 ERROR_SUCCESS 表示检查失败,而非文件未被编码。
*/
BOOL IsEncoded(_In_z_ LPCTSTR NameOfFile _In_ __readonly KEY *Key )
{
if (IsEmptyString( NameOfFile ) || !Key )
{
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
Ptr< type
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5758 2019-01-02 11:53 异或实现文件加解密\main.cpp
文件 8078 2019-01-03 12:00 异或实现文件加解密\Qt中的实现.cpp
文件 145 2018-12-27 15:59 异或实现文件加解密\xor.cpp
文件 256 2018-12-27 15:59 异或实现文件加解密\xor.h
文件 63 2018-12-27 15:59 异或实现文件加解密\xor.qrc
文件 770 2018-12-27 15:59 异或实现文件加解密\xor.ui
文件 10700 2019-01-02 09:44 异或实现文件加解密\Xor.vcxproj
文件 2643 2018-12-27 15:59 异或实现文件加解密\Xor.vcxproj.filters
文件 581 2018-12-27 15:59 异或实现文件加解密\Xor.vcxproj.user
目录 0 2019-01-03 11:46 异或实现文件加解密
----------- --------- ---------- ----- ----
28994 10
- 上一篇:EncryptQtDemo.rar
- 下一篇:手写板绘图程序
相关资源
- EncryptQtDemo.rar
- smallpdf1.20.0无限时间版.rar
- 383C开发大全(提高卷)源码.rar
- IsoHeightCtrl.zip
- 0145、低成本可调数显稳压电源(1.3
- refined_Lee_fliter.rar
- shadowsocks-libev_2.5.5-1_amd64_Ubuntu14.04.de
- 普林斯顿微积分读本视频列表.txt
- WannaCry勒索病毒一键加固脚本v1.05by叉
- WINDOWS聊天课程设计报告
- sccm.txt序列号.txt
- 8taesy.rar
- luke1215_10971614.txt
- MyTest.zip
- FFMpeg_SDK_详细中文指南开发手册.pdf
- NMSPublishSubscribe.zip
- 序列号吗.txt
- 完美DDOS破解版.rar
- 智慧树刷课.txt
- xmr-CentOS6_64bit-rebuild-20181019.zip
- xmr-CentOS7_64bit-rebuild-20181019.zip
- 东华HIS数据库表结构.docx
- vrt0el.zip
- 《xxxx》游戏屏蔽词库.docx
- 04.mpu6050_dmp.zip
- longyue1859_5563031.zip
- wincc报表.part2.rar
- Fuzzycontrol使用经验手册.pdf
- Unicursal.rar
- ifive_mini3视网膜版本_miui小米系统内存
评论
共有 条评论