?? untmain.~cpp
字號:
//---------------------------------------------------------------------------
#include <string.h>
#include <vcl.h>
#pragma hdrstop
#include "untMain.h"
#include "untBeatCode.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//數據的X次方
__int64 DataXSquare(int iData, int X){ int i; __int64 iRet; if(X == 0) return 1; iRet = 1; for(i = 0; i < X; i++) { iRet = iRet * iData; } return iRet;}
//十進制數據轉換成二進制數據(大于0)
//注意二進制的高位占據緩沖數據的高位int DecToBin(__int64 iData, int iIndex, int iLen, unsigned char *pBuff){ int iMod, iRet; iRet = iIndex + iLen; if(iData == 0) { pBuff[iIndex] = 0; iIndex++; } while(iData > 0) { iMod = iData % 2; iData = iData / 2; pBuff[iIndex] = iMod; iIndex++; } return iRet;}
//二進制數據轉換成十進制數據
__int64 BinToDec(unsigned char *pBuff, int iStart, int iEnd){ int i; __int64 iData; iData = 0; for(i = iStart; i <= iEnd; i++) { if(pBuff[i] == 1) iData = iData + DataXSquare(2, i - iStart); } return iData;}
//設置加密的數據緩沖
void TfrmMain::SetDataBuff(unsigned char *DataBuff)
{
int iData, iIndex;
unsigned char Buff[64];
iIndex = 0;
memset(Buff, 0, 64);
//機器編號(0-14)
iData = StrToInt(edtMachCode->Text);
iIndex = DecToBin(iData, iIndex, 15, Buff);
//隨機碼(15-25)
iData = StrToInt(edtRandCode->Text);
iIndex = DecToBin(iData, iIndex, 11, Buff);
//是否允許調整參數
if(ckbUpdPar->Checked)
iData = 1;
else
iData = 0;
iIndex = DecToBin(iData, iIndex, 1, Buff);
//多少次游戲調節檢測(27-28)
iData = cmbDayPlay->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//贏分最大誤差(29-30)
iData = cmbMinError->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//押分超過多少為殺板人(31-32)
iData = cmbGreatePress->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//押分少于多少為釣魚人(33-34)
iData = cmbFisherPress->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//釣魚人最大贏分1(35-37)
iData = cmbFisherMaxWin1->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//釣魚人最大贏分2(38-40)
iData = cmbFisherMaxWin2->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//拉連線彩下限(41-43)
iData = cmbSendLineLottMin->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//拉連線彩上限(44-46)
iData = cmbSendLineLottMax->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//拉單機彩輸分(47-49)
iData = cmbPullMachKill->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//殺板人多少次游戲后必須考慮放單機彩(50-52)
iData = PullMachPlay1->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//其他人多少次游戲后必須考慮放單機彩(53-55)
iData = PullMachPlay2->ItemIndex;
iIndex = DecToBin(iData, iIndex, 3, Buff);
//殺板人輸分多少后考慮放分給他(56-57)
iData = cmbSendPoint1->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//其他人輸分多少后考慮放分給他(58-59)
iData = cmbSendPoint2->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//輸分超過多少稱為大殺板人(60-61)
iData = cmbRescueKill->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//大殺板人押分超過多少放分(62-63)
iData = cmbRescuePoint->ItemIndex;
iIndex = DecToBin(iData, iIndex, 2, Buff);
//設置DataBuff
DataBuff[0] = BinToDec(Buff, 0, 7);
DataBuff[1] = BinToDec(Buff, 8, 15);
DataBuff[2] = BinToDec(Buff, 16, 23);
DataBuff[3] = BinToDec(Buff, 24, 31);
DataBuff[4] = BinToDec(Buff, 32, 39);
DataBuff[5] = BinToDec(Buff, 40, 47);
DataBuff[6] = BinToDec(Buff, 48, 55);
DataBuff[7] = BinToDec(Buff, 56, 63);
}
//在字符串strCode1前面補0
AnsiString FillZero(AnsiString strCode, int iNeedLen)
{
int i, iLen;
AnsiString strZero;
iLen = strCode.Length();
if(iLen >= iNeedLen)
{
return strCode;
}
else
{
strZero = "";
for(i = 0; i < iNeedLen - iLen; i++)
{
strZero = strZero + '0';
}
return strZero + strCode;
}
}
//打碼
bool TfrmMain::BeatCode(unsigned char *pIn, unsigned char *pOut){ int i, iData; unsigned char Buff[8]; //將整數轉換成二進制數據 for(i = 0; i < 8; i++) { memset(Buff, 0, 8); DecToBin(pIn[i], 0, 8, Buff); memcpy(pOut + 8 * i, Buff, 8); } //0 - 14位:機器編號(驗證) iData = BinToDec(pOut, 0, 14); if(iData != StrToInt(edtMachCode->Text)) return FALSE; //15 - 25位:隨機碼(驗證) iData = BinToDec(pOut, 15, 25); if(iData != StrToInt(edtRandCode->Text)) return FALSE; //是否允許用戶調整游戲參數 iData = BinToDec(pOut, 26, 26); //27 - 28位:多少次游戲調節檢測 iData = BinToDec(pOut, 27, 28); cmbDayPlay->ItemIndex = iData; //29 - 30位:實際和理想分數最小誤差 iData = BinToDec(pOut, 29, 30); cmbMinError->ItemIndex = iData; //31 - 32位:押分達多少稱為殺板人 iData = BinToDec(pOut, 31, 32); cmbGreatePress->ItemIndex = iData; //33 - 34位:押分少于多少稱釣魚人 iData = BinToDec(pOut, 33, 34); cmbFisherPress->ItemIndex = iData; //35 - 37位:釣魚人的最大贏分1 iData = BinToDec(pOut, 35, 37); cmbFisherMaxWin1->ItemIndex = iData; //38 - 40位:釣魚人的最大贏分2 iData = BinToDec(pOut, 38, 40); cmbFisherMaxWin2->ItemIndex = iData; //41 - 43位:連線彩達多少才能拉下限 iData = BinToDec(pOut, 41, 43); cmbSendLineLottMin->ItemIndex = iData; //44 - 46位:連線彩達多少才能拉上限 iData = BinToDec(pOut, 44, 46); cmbSendLineLottMax->ItemIndex = iData; //47 - 49位:拉單機彩最小輸分 iData = BinToDec(pOut, 47, 49); cmbPullMachKill->ItemIndex = iData; //50 - 52位:殺板人多少次游戲后必須考慮單機彩1 iData = BinToDec(pOut, 50, 52); PullMachPlay1->ItemIndex = iData; //53 - 55位:其他人多少次游戲后必須考慮單機彩2 iData = BinToDec(pOut, 53, 55); PullMachPlay2->ItemIndex = iData; //56 - 57位:殺板人輸分達多少考慮放用戶 iData = BinToDec(pOut, 56, 57); cmbSendPoint1->ItemIndex = iData; //58 - 59位:其他人輸分達多少考慮放用戶 iData = BinToDec(pOut, 58, 59); cmbSendPoint2->ItemIndex = iData; //60 - 6位:用戶輸分超過多少稱大殺板人 iData = BinToDec(pOut, 60, 61); cmbRescueKill->ItemIndex = iData; //62 - 63位:大殺板人單次押分多少才拯救 iData = BinToDec(pOut, 62, 63); cmbRescuePoint->ItemIndex = iData; return TRUE;}
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnEncClick(TObject *Sender)
{
unsigned char In[8];
unsigned char Out[8];
unsigned char Buff[8];
unsigned char CodeBuff[64];
int i, iTemp, iCode1, iCode2, iCode3, iCode4;
AnsiString strCode1, strCode2, strCode3, strCode4;
//判斷機器編號輸入是否正確
iTemp = StrToInt(edtMachCode->Text);
if(iTemp < 0 || iTemp > 32000)
{
Application->MessageBoxA("機器編號輸入錯誤,請輸入0-32000之間的數據!", "輸入錯誤", MB_OK);
edtMachCode->SetFocus();
return;
}
//判斷隨機碼輸入是否正確
iTemp = StrToInt(edtRandCode->Text);
if(iTemp < 0 || iTemp > 4000)
{
Application->MessageBoxA("隨機碼輸入錯誤,請輸入0-4000之間的數據!", "輸入錯誤", MB_OK);
edtRandCode->SetFocus();
return;
}
//設置加密的數據緩沖
SetDataBuff(In);
//加密數據
Des_Go(Out, In, sizeof(In), des_key, sizeof(des_key), ENCRYPT);
//將加密后的數據轉換成用十進制表示
memset(CodeBuff, 0, 64);
for(i = 0; i < 8; i++)
{ memset(Buff, 0, 8); DecToBin(Out[i], 0, 8, Buff); memcpy(CodeBuff + 8 * i, Buff, 8); } //48 - 63位 iCode1 = BinToDec(CodeBuff, 48, 63);
strCode1 = FillZero(IntToStr(iCode1), 5);
//32 - 47位 iCode2 = BinToDec(CodeBuff, 32, 47);
strCode2 = FillZero(IntToStr(iCode2), 5);
//16 - 31位 iCode3 = BinToDec(CodeBuff, 16, 31);
strCode3 = FillZero(IntToStr(iCode3), 5);
//0 - 15位 iCode4 = BinToDec(CodeBuff, 0, 15);
strCode4 = FillZero(IntToStr(iCode4), 5);
edtCode->Text = strCode1 + strCode2 + strCode3 + strCode4;}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnDecClick(TObject *Sender)
{
int iIndex;
unsigned char In[8];
unsigned char Out[8];
unsigned char Buff[64];
//將整數轉換成二進制數據放在Buff中
iIndex = 0;
memset(Buff, 0, 64);
//0 - 15位
iIndex = DecToBin(StrToInt64(edtCode->Text.SubString(16, 5)), iIndex, 16, Buff);
//16 - 31位
iIndex = DecToBin(StrToInt64(edtCode->Text.SubString(11, 5)), iIndex, 16, Buff);
//32 - 47位
iIndex = DecToBin(StrToInt64(edtCode->Text.SubString(6, 5)), iIndex, 16, Buff);
//48 - 63位
iIndex = DecToBin(StrToInt64(edtCode->Text.SubString(1, 5)), iIndex, 16, Buff);
//設置輸入緩沖
In[0] = BinToDec(Buff, 0, 7);
In[1] = BinToDec(Buff, 8, 15);
In[2] = BinToDec(Buff, 16, 23);
In[3] = BinToDec(Buff, 24, 31);
In[4] = BinToDec(Buff, 32, 39);
In[5] = BinToDec(Buff, 40, 47);
In[6] = BinToDec(Buff, 48, 55);
In[7] = BinToDec(Buff, 56, 63);
//解密數據
Des_Go(Out, In, sizeof(In), des_key, sizeof(des_key), DECRYPT);
//分析解密數據
memset(Buff, 0, 64);
if(!BeatCode(Out, Buff))
{
Application->MessageBoxA("您輸入的卡號不正確!", "輸入錯誤", MB_OK);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::btnExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -