//生成密文
bool CWHEncrypt::XorEncrypt(LPCTSTR pszSourceData, LPTSTR pszEncrypData, WORD wMaxCount)
{
//變數定義
CT2CW strSrcData(pszSourceData);
WCHAR szEncrypData[MAX_ENCRYPT_LEN+1]=L"";
//生成密鑰
WORD wRandKey[ENCRYPT_KEY_LEN];
wRandKey[0]=lstrlenW(strSrcData);
for (WORD i=1;i<CountArray(wRandKey);i++) wRandKey[i]=rand()%0xFFFF;
//步驟準備
WORD wTempCode=0;
WORD wTimes=((wRandKey[0]+ENCRYPT_KEY_LEN-1)/ENCRYPT_KEY_LEN)*ENCRYPT_KEY_LEN;
//引數效驗
ASSERT((wTimes*8+1)<=wMaxCount);
if ((wTimes*8+1)>wMaxCount) return false;
//生成密文
for (WORD i=0;i<wTimes;i++)
{
if (i<wRandKey[0]) wTempCode=strSrcData[i]^wRandKey[i%ENCRYPT_KEY_LEN];
else wTempCode=wRandKey[i%ENCRYPT_KEY_LEN]^(WORD)(rand()%0xFFFF);
swprintf(szEncrypData+i*8,L"%04X%04X",wRandKey[i%ENCRYPT_KEY_LEN],wTempCode);
}
//字符轉換
CW2CT strEncrypData(szEncrypData);
lstrcpyn(pszEncrypData,strEncrypData,wMaxCount);
return true;
}
//解開密文
bool CWHEncrypt::XorCrevasse(LPCTSTR pszEncrypData, LPTSTR pszSourceData, WORD wMaxCount)
{
//設定結果
pszSourceData[0]=0;
//變數定義
CT2CW strEncrypData(pszEncrypData);
WCHAR szSrcData[MAX_SOURCE_LEN]=L"";
//效驗長度
WORD wEncrypPassLen=lstrlenW(strEncrypData);
if (wEncrypPassLen<ENCRYPT_KEY_LEN*8) return false;
//提取長度
WCHAR szTempBuffer[5]=L"";
szTempBuffer[CountArray(szTempBuffer)-1]=0;
CopyMemory(szTempBuffer,(LPCWSTR)strEncrypData,sizeof(WCHAR)*4);
//獲取長度
WCHAR * pEnd=NULL;
WORD wSoureLength=(WORD)wcstol(szTempBuffer,&pEnd,16);
//長度效驗
ASSERT(wEncrypPassLen==(((wSoureLength+ENCRYPT_KEY_LEN-1)/ENCRYPT_KEY_LEN)*ENCRYPT_KEY_LEN*8));
if (wEncrypPassLen!=(((wSoureLength+ENCRYPT_KEY_LEN-1)/ENCRYPT_KEY_LEN)*ENCRYPT_KEY_LEN*8)) return false;
//長度效驗
ASSERT((wSoureLength+1)<=wMaxCount);
if ((wSoureLength+1)>wMaxCount) return false;
//解開密碼
for (INT i=0;i<wSoureLength;i++)
{
//獲取密鑰
WCHAR szKeyBuffer[5];
szKeyBuffer[CountArray(szKeyBuffer)-1]=0;
szTempBuffer[CountArray(szTempBuffer)-1]=0;
CopyMemory(szKeyBuffer,(LPCWSTR)(strEncrypData+i*8),sizeof(WCHAR)*4);
CopyMemory(szTempBuffer,(LPCWSTR)strEncrypData+i*8+4,sizeof(WCHAR)*4);
//提取密鑰
WCHAR wKey=(WCHAR)wcstol(szKeyBuffer,&pEnd,16);
WCHAR wEncrypt=(WCHAR)wcstol(szTempBuffer,&pEnd,16);
//生成原文
szSrcData[i]=(WCHAR)((WCHAR)wKey^(WCHAR)wEncrypt);
}
//終止字符
szSrcData[wSoureLength]=0;
//字符轉換
CW2CT strSrcData(szSrcData);
lstrcpyn(pszSourceData,strSrcData,wMaxCount);
return true;
}
===================================================================
//機器標識
bool CWHService::GetMachineID(TCHAR szMachineID[LEN_MACHINE_ID])
{
//變數定義
TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
//網卡標識
GetMACAddress(szMACAddress);
//轉換資訊
ASSERT(LEN_MACHINE_ID>=LEN_MD5);
CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
return true;
}
//機器標識
bool CWHService::GetMachineIDEx(TCHAR szMachineID[LEN_MACHINE_ID])
{
//變數定義
TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
//網卡標識
WORD wMacSize=GetMACAddress(szMACAddress);
//硬碟標識
DWORD *pbuf=(DWORD*)szMACAddress;
WORD wIndex=(wMacSize+sizeof(DWORD)-1)/sizeof(DWORD);
LPCTSTR pszHardDisk[]={TEXT("C:\\"),TEXT("D:\\"),TEXT("E:\\")};
for (WORD i=wIndex;i<CountArray(pszHardDisk);i++)
{
ASSERT(CountArray(pszHardDisk)>(i-wIndex));
GetVolumeInformation(pszHardDisk[i-wIndex],NULL,0,pbuf+i,NULL,NULL,0,NULL);
}
//轉換資訊
ASSERT(LEN_MACHINE_ID>=LEN_MD5);
CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
return true;
}
==============================================
希望各位大神幫我轉換成DELPHI謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/53705.html
標籤:語言基礎/算法/系統設計
上一篇:一個視窗封裝到dll中就不顯示
下一篇:SP檔案:[/showAllStudent.jsp] 的第 [23] 行發生了一個錯誤 StudentDB cannot be resolved to a ty
