delphi7 写的一个验证btcdice网站结果的程序

mark 下:

主要实现的功能有:

  Sha256算法 / hmac_sha512算法 (上网搜索了2天才搞定,资料太少)
 包含Listview 相关用法

1. Main window

2. 运行结果

 

unit Main_unit;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FlatUtils, FlatCtrls, StdCtrls, StrUtils, PerlRegEx,
  DCPrijndael, Dcpsha256, flchash, ComCtrls;
type
  TmainForm = class(TForm)
    informationGroup: TFlatGroupBox;
    informationMemo: TFlatMemo;
    serverSeedEdit: TFlatEdit;
    serverSeedHashEdit: TFlatEdit;
    clientSeedEdit: TFlatEdit;
    betIDEdit: TFlatEdit;
    betRangeEdit: TFlatEdit;
    queryButton: TFlatButton;
    calculateButton: TFlatButton;
    donateButton: TFlatButton;
    copyBTCButton: TFlatButton;
    copyLTCButton: TFlatButton;
    copyDOGEButton: TFlatButton;
    FlatListView1: TFlatListView;
    procedure donateButtonClick(Sender: TObject);
    procedure serverSeedEditClick(Sender: TObject); procedure serverSeedHashEditClick(Sender: TObject); procedure clientSeedEditClick(Sender: TObject); procedure queryButtonClick(Sender: TObject); procedure copyDOGEButtonClick(Sender: TObject); procedure copyLTCButtonClick(Sender: TObject); procedure copyBTCButtonClick(Sender: TObject); procedure calculateButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure betIDEditKeyPress(Sender: TObject; var Key: Char); procedure betRangeEditKeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var mainForm: TmainForm; openCopyButton: String; readyToCalculate: String; implementation { ChangeLog : 2016/7/4 1:11:37 v1.3.8 1. flatlistview 倒叙排列 2. 关闭 serverseed , serverSeedHash, clientSeed 设置为只读 3. 限制 betID , betRange 只能输入数字 4. 计算 按钮默认 disable, serverseed验证成功方可开启 5. 计算开始前 需要检测betID , betRange 大小关系 } // Function to get HashSha256 function getHashSha256Value(str:string):ansiString; var Hash : TDCP_sha256; Digest: array[0..64] of byte; i: integer; s: ansiString; begin s:= ''; hash := TDCP_sha256.Create(nil); if hash<>nil then begin try Hash.Init; // initialize it Hash.UpdateStr(str); // hash the stream contents Hash.Final(Digest); // produce the digest for i:= 0 to length(Digest)-1 do s:= s + IntToHex(Digest[i],2); finally hash.free; end; end; result := LowerCase(MidStr(s, 1, 64)); end; {$R *.dfm} procedure TmainForm.donateButtonClick(Sender: TObject); begin calculateButton.Enabled := False; serverSeedEdit.Left:=38; serverSeedEdit.Width:=300; serverSeedEdit.Ticket.Caption:='BTC:'; serverSeedEdit.ticket.Font.Name:='微软雅黑'; serverSeedHashEdit.Left:=38; serverSeedHashEdit.Width:=300; serverSeedHashEdit.Ticket.Caption:='LTC:'; serverSeedHashEdit.ticket.Font.Name:='微软雅黑'; clientSeedEdit.Left:=38; clientSeedEdit.Width:=300; clientSeedEdit.Ticket.Caption:='Doge:'; clientSeedEdit.ticket.Font.Name:='微软雅黑'; serverSeedEdit.Text:='166W2zr9WoUx2dPB9bXXLNVHEahYBCy5uq'; serverSeedEdit.ReadOnly:=True; serverSeedHashEdit.Text:='LR4Qm8Cc2jKRdV4MZCpXtrAE8SZ2dXuj1o'; serverSeedHashEdit.ReadOnly:=True; clientSeedEdit.Text:='DU5zf68E7x4YtMayUaX91z6dQDouS2u5ae'; clientSeedEdit.ReadOnly:=True; openCopyButton:='Yes'; end; procedure TmainForm.serverSeedEditClick(Sender: TObject); begin if openCopyButton ='Yes' then begin copyBTCButton.Visible:=True; copyLTCButton.Visible:=False; copyDOGEButton.Visible:=False; end; end; procedure TmainForm.serverSeedHashEditClick(Sender: TObject); begin if openCopyButton ='Yes' then begin copyBTCButton.Visible:=False; copyLTCButton.Visible:=True; copyDOGEButton.Visible:=False; end; end; procedure TmainForm.clientSeedEditClick(Sender: TObject); begin if openCopyButton ='Yes' then begin copyBTCButton.Visible:=False; copyLTCButton.Visible:=False; copyDOGEButton.Visible:=True; end; end; procedure TmainForm.queryButtonClick(Sender: TObject); var List: TStrings; reg: TPerlRegEx; num: Integer; begin serverSeedEdit.Left:=8; serverSeedEdit.Width:=435; serverSeedEdit.Ticket.Caption:=''; serverSeedHashEdit.Left:=8; serverSeedHashEdit.Width:=435; serverSeedHashEdit.Ticket.Caption:=''; clientSeedEdit.Left:=8; clientSeedEdit.Width:=435; clientSeedEdit.Ticket.Caption:=''; serverSeedEdit.Clear; serverSeedHashEdit.Clear; clientSeedEdit.Clear; betIDEdit.Clear; betRangeEdit.Clear; List := TStringList.Create; reg := TPerlRegEx.Create; reg.Subject := informationMemo.Text; reg.RegEx := '" "';{分割} num:=0; while reg.MatchAgain do begin Inc(num); end; reg.Split(List,MaxInt); if num = 3 then begin if getHashSha256Value(MidStr(List.Strings[0],2,64)) = List.Strings[1] then begin ShowMessage('服务器种子验证成功'); calculateButton.Enabled:= True; ReadyToCalculate := 'Yes'; serverSeedEdit.Text := MidStr(List.Strings[0],2,64); serverSeedHashEdit.Text := List.Strings[1]; clientSeedEdit.Text := List.Strings[2]; betIDEdit.Text := LeftStr(List.Strings[3], (Length(List.Strings[3]) - 1)); betRangeEdit.Text := InttoStr(StrToIntDef(betIDEdit.Text, 0) + 10); FreeAndNil(reg); List.Free; end else begin MessageBox(MainForm.Handle,'服务器种子验证失败,Hash不匹配','BD提醒您',MB_ICONWARNING+MB_OK); { Reset } serverSeedEdit.Clear; serverSeedHashEdit.Clear; clientSeedEdit.Clear; betIDEdit.Clear; betRangeEdit.Clear; informationMemo.Clear; informationMemo.SetFocus; calculateButton.Enabled := False; end; end else begin MessageBox(MainForm.Handle,'复制的信息有误,格式不正确','BD提醒您',MB_ICONWARNING+MB_OK); informationMemo.Clear; informationMemo.SetFocus; calculateButton.Enabled := False; end; end; procedure TmainForm.copyDOGEButtonClick(Sender: TObject); begin clientSeedEdit.SelectAll; clientSeedEdit.CopyToClipboard; ShowMessage('已经成功复制Doge【狗狗】地址,谢谢支持'); begin serverSeedEdit.Left:=8; serverSeedEdit.Width:=435; serverSeedEdit.Ticket.Caption:=''; serverSeedHashEdit.Left:=8; serverSeedHashEdit.Width:=435; serverSeedHashEdit.Ticket.Caption:=''; clientSeedEdit.Left:=8; clientSeedEdit.Width:=435; clientSeedEdit.Ticket.Caption:=''; serverSeedEdit.Clear; serverSeedHashEdit.Clear; clientSeedEdit.Clear; betIDEdit.Clear; betRangeEdit.Clear; informationMemo.Clear; informationMemo.SetFocus; calculateButton.Enabled := False; openCopyButton:='No'; copyDOGEButton.Visible:=False; end; end; procedure TmainForm.copyLTCButtonClick(Sender: TObject); begin serverSeedHashEdit.SelectAll; serverSeedHashEdit.CopyToClipboard; ShowMessage('已经成功复制LTC【辣条】地址,谢谢支持'); begin serverSeedEdit.Left:=8; serverSeedEdit.Width:=435; serverSeedEdit.Ticket.Caption:=''; serverSeedHashEdit.Left:=8; serverSeedHashEdit.Width:=435; serverSeedHashEdit.Ticket.Caption:=''; clientSeedEdit.Left:=8; clientSeedEdit.Width:=435; clientSeedEdit.Ticket.Caption:=''; serverSeedEdit.Clear; serverSeedHashEdit.Clear; clientSeedEdit.Clear; betIDEdit.Clear; betRangeEdit.Clear; informationMemo.Clear; informationMemo.SetFocus; openCopyButton:='No'; calculateButton.Enabled := False; copyLTCButton.Visible:=False; end; end; procedure TmainForm.copyBTCButtonClick(Sender: TObject); begin serverSeedEdit.SelectAll; serverSeedEdit.CopyToClipboard; ShowMessage('已经成功复制BTC【比特币】地址,谢谢支持'); begin serverSeedEdit.Left:=8; serverSeedEdit.Width:=435; serverSeedEdit.Ticket.Caption:=''; serverSeedHashEdit.Left:=8; serverSeedHashEdit.Width:=435; serverSeedHashEdit.Ticket.Caption:=''; clientSeedEdit.Left:=8; clientSeedEdit.Width:=435; clientSeedEdit.Ticket.Caption:=''; serverSeedEdit.Clear; serverSeedHashEdit.Clear; clientSeedEdit.Clear; betIDEdit.Clear; betRangeEdit.Clear; informationMemo.Clear; informationMemo.SetFocus; openCopyButton:='No'; calculateButton.Enabled := False; copyBTCButton.Visible:=False; end; end; procedure TmainForm.calculateButtonClick(Sender: TObject); var hmacSha512Value: String; hmacHashKey: String; betStart : Integer; listitem: TlistItem; serverSeedI,rollStart : Integer; serverSeedRollDefault: String; serverSeedRoll : Double; begin if StrToInt(betIDEdit.Text) < StrToInt(betRangeEdit.Text) then begin flatlistview1.Clear; flatlistview1.Items.Clear; flatlistview1.Columns.Clear; flatlistview1.Columns.add; flatlistview1.Columns.add; flatlistview1.Columns.Items[1].Width:=65; flatlistview1.Columns.Items[0].Caption:='BetID'; flatlistview1.Columns.Items[1].Caption:='Result'; flatlistview1.ViewStyle:=vsreport; flatlistview1.GridLines:=True; for betStart:=StrToInt(betRangeEdit.Text) downto StrToInt(betIDEdit.Text) do begin hmacHashKey := clientSeedEdit.Text + ':' + IntToStr(betStart); hmacSha512Value := SHA512DigestToHexA(CalcHMAC_SHA512(serverSeedEdit.Text,hmacHashKey)); serverSeedI := 0; serverSeedRoll := -1; while (serverSeedRoll = -1) do if serverSeedI = 25 then begin serverSeedRollDefault := IntToStr( StrToInt('$'+copy(hmacSha512Value,126,3))); serverSeedRoll := StrToInt(serverSeedRollDefault) / 10000; end // End for if else begin if serverSeedI >= 1 then rollStart := 5 * serverSeedI + 1 else rollStart := 5 * serverSeedI; serverSeedRollDefault := IntToStr( StrToInt('$'+copy(hmacSha512Value,rollStart,5))); if StrToInt(serverSeedRollDefault) < 1000000 then serverSeedRoll := StrToInt(serverSeedRollDefault) / 10000; serverSeedI := serverSeedI + 1; end; //end if - else with flatListView1 do begin ListItem:=Items.Add; ListItem.Caption:= IntToStr(BetStart); ListItem.SubItems.Add(FloatToStr(serverSeedRoll)); end; // End for with end; // End for calculateButton.Enabled := False; end else begin MessageBox(MainForm.Handle,'投注期数需大于初始值','BD提醒您',MB_ICONWARNING+MB_OK); betRangeEdit.Clear; betRangeEdit.SetFocus; end; end; // End procedure procedure TmainForm.FormCreate(Sender: TObject); begin MessageBox(MainForm.Handle,'此工具用于验证BD投注的公平性,点击账户-换手气,然后复制信息到主界面点击验证即可。注意如有出入请到网站公平下面的第三方验证加以佐证,若觉得好用请打赏一点,谢谢支持!祝旗开得胜,逢赌必赢','',MB_ICONINFORMATION+MB_OK); calculateButton.Enabled := False; end; procedure TmainForm.betIDEditKeyPress(Sender: TObject; var Key: Char); begin If not (key in [#48..#57,#8]) then begin showmessage('只能输入数字!'); key:= #0; end; end; procedure TmainForm.betRangeEditKeyPress(Sender: TObject; var Key: Char); begin If not (key in [#48..#57,#8]) then begin showmessage('只能输入数字!'); key:= #0; end; end; end.

 

转载于:https://www.cnblogs.com/topshooter/p/delphi7BDverify.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值