在網(wǎng)絡(luò)傳輸重要信息或存儲重要文件信息時,大部分會對數(shù)據(jù)加密,保證數(shù)據(jù)的安全性?;ヂ?lián)網(wǎng)上流行的可逆加密方式對數(shù)據(jù)的安全性沒有保證,便自己寫了一套安全性極高加密、解密方法。
公司主營業(yè)務(wù):網(wǎng)站制作、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出東港免費做網(wǎng)站回饋大家。
方法的實現(xiàn)方式及特點:
1.采用指定單個字節(jié)加密轉(zhuǎn)換(轉(zhuǎn)換形式為ascll碼表中0-128的形式,由1個字節(jié)拆分為三個字節(jié),下面說明拆分方式);
2.采用數(shù)組中隨機數(shù)據(jù)減指定加密字節(jié)(比如當前數(shù)據(jù)ascll碼為121,當前數(shù)組中的數(shù)據(jù)為222,結(jié)果為222-121=101,當然這個只是參考實例);
3.采用隨機指定數(shù)組方式(如果需要用到無規(guī)律加密方式,可以通過隨機指定數(shù)組方式進行加密);
4.指定很大的數(shù)據(jù)加密格式(比如使用1-2048字節(jié)中任意長度為一次的加密比例,大量數(shù)據(jù)分為多次加密);
5.多次加密數(shù)據(jù)時,第一次加密數(shù)據(jù)生成數(shù)據(jù)頭與加密信息,之后只生成加密信息(數(shù)據(jù)頭包含使用的加密數(shù)組(比如數(shù)組1、數(shù)組2、等…,)和加密字節(jié)長度,解析數(shù)據(jù)時將會根據(jù)數(shù)據(jù)頭獲取到這些信息);
6.加密字節(jié)為跳序形式(比如指定加密1,3,5字節(jié)或者指定為別的字節(jié)調(diào)序形式,只需簡單改些代碼就能實現(xiàn));
指定一個字節(jié)加密后拆分為三個字節(jié)表示為:
①第一個字節(jié)為隨機數(shù)組中的隨機數(shù)據(jù)(比如數(shù)組有8個數(shù)據(jù),第一個字節(jié)范圍0-7作為標記,用來解密使用);
②第二個字節(jié)為加密后的數(shù)據(jù)拆分的一部分(小于128用來對上ascll碼表);
③第三個字節(jié)為采用的拆分格式(解密使用)。
下面貼上加密使用的數(shù)組:
//數(shù)組中的任意數(shù)據(jù)都可以修改為1-255之間,末尾數(shù)據(jù)為0防止數(shù)組越界 unsigned char Data1[] ={255,210,208,179,168,199,202,189,0}; unsigned char Data2[] ={166,207,205,196,191,190,163,180,0}; unsigned char Data3[] ={155,197,186,172,228,226,219,239,0}; unsigned char Data4[] ={188,229,192,254,252,212,230,217,0}; unsigned char Data5[] ={229,206,212,224,253,211,181,207,0};
目前代碼中使用的是這5個數(shù)組,需要更大的隨機性可以通過簡單修改代碼,寫入更多的數(shù)組,數(shù)組中的數(shù)據(jù)在1-255(不建議寫0,字符串中0為結(jié)尾)。
數(shù)據(jù)頭定義格式:
數(shù)據(jù)頭1-3字節(jié)為“LKY”用來校驗加密后的數(shù)據(jù),如果數(shù)據(jù)中不存在,將不處理數(shù)據(jù);
數(shù)據(jù)頭4-128字節(jié)為校驗信息段,如果校驗不正確,將不處理數(shù)據(jù);
數(shù)據(jù)頭129-133字節(jié)為使用的指定數(shù)組進行加密(目前最大可以指定5個數(shù)組,同時使用5個數(shù)組進行對指定直接加密處理,修改代碼可以增加更多的數(shù)組);
數(shù)據(jù)頭134-256字節(jié)為補數(shù)據(jù);
數(shù)據(jù)頭257-260字節(jié)為指定的加密長度(加密長度為1-2048);
數(shù)據(jù)頭261-512字節(jié)為補數(shù)據(jù);
數(shù)據(jù)頭的總長度為512個字節(jié)。
下面貼上.h文件(其中包括任意格式文件的加密、解密函數(shù)):
#include <vector> struct FileData { CString Filename; LPVOID _this; bool bCover; }; //數(shù)據(jù)加密解密類 class DataOperation { public: DataOperation(); virtual ~DataOperation(); /***************************** 加密部分 ***************************/ //設(shè)置加密數(shù)據(jù)(傳入1表示使用unsigned char Data1[] ={255,210,208,179,168,199,202,189,193,0}數(shù)組加密)傳入類型1-5, //如果傳入數(shù)據(jù)超過5次,不再記錄 bool SetEncryptionData(int nCount); //設(shè)備每一次加密的數(shù)據(jù)長度值為0-2048,默認使用2048 bool SetEncryptionLen(int nLen); //加密數(shù)據(jù)函數(shù) //返回加密完成的函數(shù) //如果傳入的數(shù)據(jù)超過設(shè)置每一次加密的數(shù)據(jù)長度,將會采用設(shè)置的數(shù)據(jù)長度 //第一次調(diào)用會生成512字節(jié)數(shù)據(jù)頭與加密后的數(shù)據(jù)一起返回(比如需要加密3048個字節(jié)數(shù)據(jù),第一次調(diào)用函數(shù)返回數(shù)據(jù)頭和2048加密后的數(shù)據(jù),第二次調(diào)用返回剩下1000個字節(jié)加密后的數(shù)據(jù)) char *EncryptionData(char * SrcData,int & nDataLen); //加密文件 //參數(shù)一文件完整路徑加名稱 //參數(shù)二 true為覆蓋文件 false為創(chuàng)建文件名加_Temp的新文件 bool EncryptionFile(CString Filename,bool bCover); /**********************************************/ /****************** 解密部分 *****************************/ //解析數(shù)據(jù)頭信息,返回每一次解密需要傳入的數(shù)據(jù)長度(使用加密后的數(shù)據(jù)前512字節(jié)為數(shù)據(jù)頭信息傳入函數(shù)獲取到加密數(shù)據(jù)以及加密的數(shù)據(jù)長度等) int DecryptionHead(char * SrcData); //解密數(shù)據(jù)(傳入加密后的數(shù)據(jù)以及數(shù)據(jù)長度,不要帶數(shù)據(jù)頭信息) //比如解密3048字節(jié)長度數(shù)據(jù),去掉數(shù)據(jù)512個字節(jié)數(shù)據(jù)(數(shù)據(jù)頭信息),從513字節(jié)開始為需要解析的數(shù)據(jù) //nDataLen 為解析數(shù)據(jù)頭返回的每次需要傳入的數(shù)據(jù)長度 char *DecryptionData(const char * SrcData,int & nDataLen); //解密文件 bool DecryptionFile(CString Filename,bool bCover); /************************************************/ private: //加密數(shù)據(jù)計算函數(shù) char *EncryptionData_(char * SrcData,int & nDataLen,char *HeadData = 0); //指定字節(jié)進行加密運算 unsigned char *Encryption_Operation(std::vector<unsigned char *> VData,unsigned char SrcData[]); //獲取指定的加密數(shù)組 unsigned char * GetData_Operation(int nVal); //根據(jù)指定加密長度獲取解密長度 int GetDecryptionDataLen(int nDataLen); //指定字節(jié)進行解密運算 unsigned char *Decryption_Operation(unsigned char * VData[],unsigned char SrcData[],int nVDataLen); private: //保存需要使用的加密數(shù)據(jù)(只在加密數(shù)據(jù)時使用,解密時自動根據(jù)數(shù)據(jù)頭信息獲取加密數(shù)據(jù)) char m_EncryptionData[6]; //保存需要使用的解密數(shù)據(jù) char m_DecryptionData[6]; // int m_EncryptionDataLen; // int m_DecryptionDataLen; // bool m_bValidHead; };
下面貼上.cpp文件:
#include "stdafx.h" #include "Operation.h" unsigned char Data1[] ={255,210,208,179,168,199,202,189,0}; unsigned char Data2[] ={166,207,205,196,191,190,163,180,0}; unsigned char Data3[] ={155,197,186,172,228,226,219,239,0}; unsigned char Data4[] ={188,229,192,254,252,212,230,217,0}; unsigned char Data5[] ={229,206,212,224,253,211,181,207,0}; //數(shù)組的長度 int DataLen = 8; //獲取數(shù)組 #define GetData(nVal)\ Data##nVal; DataOperation::DataOperation():m_EncryptionDataLen(2048),m_bValidHead(false),m_DecryptionDataLen(0) { memset(m_EncryptionData,0,sizeof(m_EncryptionData)); memset(m_DecryptionData,0,sizeof(m_DecryptionData)); SetEncryptionData(2); SetEncryptionData(1); } DataOperation::~DataOperation() { } //如果傳入數(shù)據(jù)超過5次,不再記錄 bool DataOperation::SetEncryptionData(int nCount) { int nLen = strlen(m_EncryptionData); if (5 <= nLen) return false; m_EncryptionData[nLen] = nCount; return true; } //設(shè)備每一次加密的數(shù)據(jù)長度值為0-2048,默認使用2048 bool DataOperation::SetEncryptionLen(int nLen) { if (0 >= nLen || 2048 < nLen) return false; m_EncryptionDataLen = nLen; return true; } //加密數(shù)據(jù)函數(shù) char * DataOperation::EncryptionData(char * SrcData,int & nDataLen) { if (0 == SrcData) return 0; if (!m_bValidHead) { //首先生出數(shù)據(jù)頭,然后與數(shù)據(jù)合并 char DataHead[513] = {0}; int nInIdex = strlen("LKY"); memcpy(DataHead,"LKY",nInIdex); //前128位校驗數(shù)據(jù)頭信息 for (int i = 3;i < 128;i++) { DataHead[i] = ((DataHead[i - 1] + i)%128 + 1); } int ii = 0; //129-133為使用的加密數(shù)據(jù) for (int i = 128;i < 133;i++) { if (0 == m_EncryptionData[ii]) { DataHead[i] = '0'; } else { DataHead[i] = m_EncryptionData[ii]; } ++ii; } //134-256為補數(shù)據(jù) for (int i = 133;i < 256;i++) { DataHead[i] = ((DataHead[i - 1] + i)%128 + 1); } //257-261為加密長度 char EncryptionDataLen[5] = {0}; itoa(m_EncryptionDataLen,EncryptionDataLen,10); ii = 0; for (int i = 256;i < 260;i++) { if (0 == EncryptionDataLen[ii]) { DataHead[i] = '99'; } else { DataHead[i] = EncryptionDataLen[ii]; } ++ii; } //261-512為補數(shù)據(jù) for (int i = 260;i < 512;i++) { DataHead[i] = ((DataHead[i - 1] + i)%128 + 1); } m_bValidHead = true; return EncryptionData_(SrcData,nDataLen,DataHead); } return EncryptionData_(SrcData,nDataLen); } //加密數(shù)據(jù)計算函數(shù) char *DataOperation::EncryptionData_(char * SrcData,int & nLen,char *HeadData) { char pStrData[2048 + 513 + 26] = {0}; int nIndex = 0; if (0 != HeadData) { memcpy(pStrData,HeadData,512); nIndex += 512; } int nOffset = 0,nLeft = 0; int nDataLen = (m_EncryptionDataLen <= nLen ? m_EncryptionDataLen : nLen); //獲取加密數(shù)組 std::vector<unsigned char *>VData; for(int ilen = 0;ilen < strlen(m_EncryptionData);ilen++) { int nVal = m_EncryptionData[ilen]; unsigned char * DataArray = GetData_Operation(nVal); VData.push_back(DataArray); } int i = 0; //開始加密數(shù)據(jù) for (;i < nDataLen;(i = i * 2 + 1)) { //拷貝沒有加密的數(shù)據(jù) if (0 < i - nLeft) { memcpy(pStrData + nIndex,SrcData + nLeft,i - nLeft); nIndex += i - nLeft; } unsigned char StrTemp[4] = {0,SrcData[i],0,0}; Encryption_Operation(VData,StrTemp); if(128 <= StrTemp[1]) { StrTemp[1] = StrTemp[1] - 127; StrTemp[2] = 127; } else if (0 == StrTemp[1]) { StrTemp[1] = '0'; StrTemp[2] = '0'; } else { StrTemp[1] = 128 - StrTemp[1]; StrTemp[2] = '1'; } //拷貝轉(zhuǎn)換過的數(shù)據(jù) memcpy(pStrData + nIndex,StrTemp,strlen((char *)StrTemp)); nIndex += strlen((char *)StrTemp); nLeft = i + 1; } if (nLeft < nDataLen && 0 != nIndex) { memcpy(pStrData + nIndex,SrcData + nLeft,nDataLen - nLeft); nIndex += nDataLen - nLeft; } else if (0 == nIndex) { nLen = nDataLen; return pStrData; } nLen = nIndex; return pStrData; } //指定字節(jié)進行加密運算 unsigned char *DataOperation::Encryption_Operation(std::vector<unsigned char *> VData,unsigned char SrcData[]) { static ULONG64 StrEncryptionVal = 0; //第一個字節(jié)標記加密數(shù)組的字節(jié)位置 SrcData[0] = (StrEncryptionVal % DataLen + '0'); for (auto it = VData.begin();it != VData.end();it++) { unsigned char * data = *it; SrcData[1] = (data[SrcData[0] - '0']) - SrcData[1]; } ++StrEncryptionVal; return SrcData; } //獲取指定的加密數(shù)組 unsigned char * DataOperation::GetData_Operation(int nVal) { switch (nVal) { case 1: { return GetData(1); } break; case 2: { return GetData(2); } break; case 3: { return GetData(3); } break; case 4: { return GetData(4); } break; case 5: { return GetData(5); } break; } return 0; } //解析數(shù)據(jù)頭信息,返回每一次解密需要傳入的數(shù)據(jù)長度(使用加密后的數(shù)據(jù)前512字節(jié)為數(shù)據(jù)頭信息傳入函數(shù)獲取到加密數(shù)據(jù)以及加密的數(shù)據(jù)長度等) int DataOperation::DecryptionHead(char * SrcData) { if (0 == SrcData || 512 > strlen(SrcData)) return 0; char pSrcData[513] = {0}; memcpy(pSrcData,SrcData,512); if (pSrcData[0] != 'L' || pSrcData[1] != 'K' || pSrcData[2] != 'Y') return 0; //前128位校驗數(shù)據(jù)頭信息 int i = 127; for (;i > 3;i--) pSrcData[i - 1] = ((pSrcData[i] + i)%128 - pSrcData[i - 1] - 1); if (pSrcData[i - 1] != 'Y') return 0; //129-134為使用的加密數(shù)據(jù) i = 128; int ii = 0; memset(m_DecryptionData,0,sizeof(m_DecryptionData)); for (;i < 133;i++) { if ('0' == pSrcData[i]) { continue; } else { m_DecryptionData[ii++] = pSrcData[i]; } } //257-261為加密長度 char EncryptionDataLen[5] = {0}; ii = 0; i = 256; for (;i < 260;i++) { if (pSrcData[i] == '99') { continue; } else { EncryptionDataLen[ii++] = pSrcData[i]; } } m_EncryptionDataLen = atoi(EncryptionDataLen); m_DecryptionDataLen = GetDecryptionDataLen(m_EncryptionDataLen); return m_DecryptionDataLen; } //根據(jù)指定加密長度獲取解密長度 int DataOperation::GetDecryptionDataLen(int nDataLen) { if (0 >= nDataLen) return 0; int nIndex = 0; for (int i = 0;i < nDataLen;(i = i * 2 + 1)) { nIndex += 2; } return nDataLen + nIndex; } //解密數(shù)據(jù)(傳入加密后的數(shù)據(jù)以及數(shù)據(jù)長度,不要帶數(shù)據(jù)頭信息) char *DataOperation::DecryptionData(const char * SrcData,int & nDataLen) { if (0 == SrcData || 0 >= nDataLen) return 0; char Data[2048 + 100] = {0}; int nIndex = 0; int nOffset = 0,nLeft = 0,nCurrent = 0; int nLen = (m_DecryptionDataLen <= nDataLen ? m_DecryptionDataLen : nDataLen); //獲取解密 int nDecryptionDataLen = strlen(m_DecryptionData); unsigned char *VData[10] = {0}; int nVDataLen = 0; for(int iLen = nDecryptionDataLen;iLen > 0;iLen--) { int nVal = m_DecryptionData[iLen - 1]; unsigned char * DataArray = GetData_Operation(nVal); VData[nVDataLen++] = DataArray; } int i = 0; //開始加密數(shù)據(jù) for (;i < nLen;(i = i * 2 + 1)) { nCurrent = i + nOffset; if (nCurrent >= nDataLen) { break; } //拷貝沒有加密的數(shù)據(jù) if (0 < nCurrent - nLeft) { memcpy(Data + nIndex,SrcData + nLeft,nCurrent - nLeft); nIndex += (nCurrent - nLeft); } unsigned char StrTemp[4] = {SrcData[nCurrent],SrcData[nCurrent + 1],SrcData[nCurrent + 2],0}; if (127 == StrTemp[2]) { StrTemp[1] = StrTemp[1] + 127; StrTemp[2] = 0; } else if ('1' == StrTemp[2]) { StrTemp[1] = 128 - StrTemp[1]; StrTemp[2] = 0; } else if ('0' == StrTemp[2]) { StrTemp[1] = 0; StrTemp[2] = 0; } else { StrTemp[2] = 0; } Decryption_Operation(VData,StrTemp,nDecryptionDataLen); //拷貝轉(zhuǎn)換過的數(shù)據(jù) memcpy(Data + nIndex,StrTemp + 1,1); nIndex += 1; nOffset += 2; nLeft = i + nOffset + 1; } if (nLeft < nLen && 0 != nIndex) { memcpy(Data + nIndex,SrcData + nLeft,nLen - nLeft); nIndex += nLen - nLeft; } else if (0 == nIndex) { return Data; } nDataLen = nIndex; return Data; } //指定字節(jié)進行解密運算 unsigned char *DataOperation::Decryption_Operation(unsigned char * VData[],unsigned char SrcData[],int nVDataLen) { for (int i = 0;i < nVDataLen;i++) { unsigned char * data = VData[i]; SrcData[1] = (data[SrcData[0] - '0']) - SrcData[1]; } return SrcData; } //加密文件 bool DataOperation::EncryptionFile(CString Filename,bool bCover) { //增加隨機加密 默認使用2,1數(shù)組 SetEncryptionData(5); SetEncryptionData(4); if (Filename.IsEmpty()) return false; CFile file1,file2; if (!file1.Open(Filename,CFile::modeRead)) return false; ULONG64 nFileLen = file1.GetLength(); if (0 == nFileLen) return false; CString Filename2(Filename.Mid(0,Filename.ReverseFind(_T('.')))); Filename2.AppendFormat(_T("_Temp%s"),Filename.Mid(Filename.ReverseFind(_T('.')), Filename.GetLength() - Filename.ReverseFind(_T('.')))); if (!file2.Open(Filename2,CFile::modeCreate | CFile::modeWrite)) return false; char StrData[4096] = {0}; int nDataLen = 0; while (0 < nFileLen) { if (2048 <= nFileLen) { file1.Read(StrData,2048); nDataLen = 2048; char *WriteFile = EncryptionData(StrData,nDataLen); file2.Write(WriteFile,nDataLen); nFileLen -= 2048; } else { file1.Read(StrData,nFileLen); nDataLen = nFileLen; char *WriteFile = EncryptionData(StrData,nDataLen); file2.Write(WriteFile,nDataLen); nFileLen -= nFileLen; break; } } file1.Close(); file2.Close(); if (bCover) { USES_CONVERSION; //覆蓋本地文件 int nResult = remove(T2A(Filename)); nResult = rename(T2A(Filename2),T2A(Filename)); } return true; } //解密文件 bool DataOperation::DecryptionFile(CString Filename,bool bCover) { if (Filename.IsEmpty()) return false; CFile file1,file2; if (!file1.Open(Filename,CFile::modeRead)) return false; ULONG64 nFileLen = file1.GetLength(); if (512 >= nFileLen) return false; CString Filename2(Filename.Mid(0,Filename.ReverseFind(_T('.')))); Filename2.AppendFormat(_T("_Temp%s"),Filename.Mid(Filename.ReverseFind(_T('.')), Filename.GetLength() - Filename.ReverseFind(_T('.')))); if (!file2.Open(Filename2,CFile::modeCreate | CFile::modeWrite)) return false; char StrData[2048 + 100] = {0}; int nDataLen = 0; file1.Read(StrData,512); //解密數(shù)據(jù)頭 int nDecryptionLen = DecryptionHead(StrData); if (0 >= nDecryptionLen) return false; nFileLen -= 512; while (0 < nFileLen) { if (nDecryptionLen <= nFileLen) { nDataLen = nDecryptionLen; file1.Read(StrData,nDataLen); char *WriteFile = DecryptionData(StrData,nDataLen); memset(StrData,0,strlen(StrData)); memcpy(StrData,WriteFile,nDataLen); file2.Write(StrData,nDataLen); nFileLen -= nDecryptionLen; } else { nDataLen = nFileLen; file1.Read(StrData,nFileLen); char *WriteFile = DecryptionData(StrData,nDataLen); memset(StrData,0,strlen(StrData)); memcpy(StrData,WriteFile,nDataLen); file2.Write(StrData,nDataLen); nFileLen -= nFileLen; break; } } file1.Close(); file2.Close(); if (bCover) { USES_CONVERSION; //覆蓋本地文件 int nResult = remove(T2A(Filename)); nResult = rename(T2A(Filename2),T2A(Filename)); } return true; }
下面說下具體函數(shù)用法:
//設(shè)置加密數(shù)據(jù)(傳入1表示使用unsigned char Data1[] ={255,210,208,179,168,199,202,189,193,0}數(shù)組加密)傳入類型1-5, //如果傳入數(shù)據(jù)超過5次,不再記錄 //這個函數(shù)需要在加密函數(shù)使用之前調(diào)用,默認采用2、1數(shù)組加密 bool SetEncryptionData(int nCount); //設(shè)置每一次加密的數(shù)據(jù)長度值為0-2048,默認使用2048 bool SetEncryptionLen(int nLen); //加密數(shù)據(jù)函數(shù) //返回加密完成的函數(shù) //如果傳入的數(shù)據(jù)超過設(shè)置每一次加密的數(shù)據(jù)長度,將會采用設(shè)置的數(shù)據(jù)長度 //第一次調(diào)用會生成512字節(jié)數(shù)據(jù)頭與加密后的數(shù)據(jù)一起返回(比如需要加密3048個字節(jié)數(shù)據(jù),第一次調(diào)用函數(shù)返回數(shù)據(jù)頭和2048加密后的數(shù)據(jù),第二次調(diào)用返回剩下1000個字節(jié)加密后的數(shù)據(jù)) char *EncryptionData(char * SrcData,int & nDataLen); //加密文件 //參數(shù)一文件完整路徑加名稱 //參數(shù)二 true為覆蓋文件 false為創(chuàng)建文件名加_Temp的新文件 bool EncryptionFile(CString Filename,bool bCover); //解析數(shù)據(jù)頭信息,返回每一次解密需要傳入的數(shù)據(jù)長度(使用加密后的數(shù)據(jù)前512字節(jié)為數(shù)據(jù)頭信息傳入函數(shù)獲取到加密數(shù)據(jù)以及加密的數(shù)據(jù)長度等) int DecryptionHead(char * SrcData); //解密數(shù)據(jù)(傳入加密后的數(shù)據(jù)以及數(shù)據(jù)長度,不要帶數(shù)據(jù)頭信息) //比如解密3048字節(jié)長度數(shù)據(jù),去掉數(shù)據(jù)512個字節(jié)數(shù)據(jù)(數(shù)據(jù)頭信息),從513字節(jié)開始為需要解析的數(shù)據(jù) //nDataLen 為解析數(shù)據(jù)頭返回的每次需要傳入的數(shù)據(jù)長度 char *DecryptionData(const char * SrcData,int & nDataLen); //解密文件 //參數(shù)一文件完整路徑加名稱 //參數(shù)二 true為覆蓋文件 false為創(chuàng)建文件名加_Temp的新文件 bool DecryptionFile(CString Filename,bool bCover);
函數(shù)使用方式參考加密文件和解密文件函數(shù),工程下載地址
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文標題:C語言實現(xiàn)無規(guī)律數(shù)據(jù)加密、解密功能
文章來源:http://muchs.cn/article40/pidgeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化、網(wǎng)站營銷、域名注冊、網(wǎng)站建設(shè)、軟件開發(fā)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)