⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 证通电子的密码键盘的Delphi测试程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      2 :   Edit14.Text :='3表示PBOC卡算法!';
      3 :   Edit14.Text :='4表示银联算法!';
   end;
end;

procedure TForm1.Button2Click(Sender: TObject);  //下载主密钥按键
var
  Ret,MKeyNo,iMKMode : Integer;

  MKeyAsc,cpAuth : array [0..100] of char;
  edtStr : String;
  Lstr,i : integer;
begin
   fillchar(MKeyAsc,sizeof(MKeyAsc),0);
   MKeyNo := HexToDec(CB1.Items[CB1.ItemIndex]);

   edtStr := trim(edit5.Text);
   Lstr := length(edtStr);
   for i :=0 to Lstr-1 do
   begin
     MKeyAsc[i] := edtStr[i+1];
   end;

   if CheckBox1.Checked then    //验证下载
   begin
       iMKMode := CB2.ItemIndex+1;
       Ret := ZT_EPP_PinLoadMasterKey(iMKMode,MKeyNo,MKeyAsc,cpAuth);

       if Ret=0 then
       begin
            sb.Panels[2].Text  :=  '下载主密钥成功';
       end;
   end
   else
   begin
       Ret := ZT_EPP_PinLoadMasterKey(0,MKeyNo,MKeyAsc,cpAuth);

       if Ret=0 then
       begin
            sb.Panels[2].Text  :=  '下载主密钥成功';
       end;
   end;

end;





procedure TForm1.Button3Click(Sender: TObject);    //下载工作按键
var
  Ret,MKeyNo,WKeyNo,iMKMode : Integer;

  MKeyAsc,cpAuth,key,DataOutput : array [0..100] of char;
  edtStr,Edit8Str : String;
  Lstr,i,iLen : integer;
begin
   fillchar(MKeyAsc,sizeof(MKeyAsc),0);
   fillchar(cpAuth,sizeof(cpAuth),0);
   fillchar(key,sizeof(key),0);
   fillchar(DataOutput,sizeof(DataOutput),0);
   
   iMKMode := ComboBox6.ItemIndex+1;    // 原主密钥长度
   MKeyNo := HexToDec(ComboBox1.Items[ComboBox1.ItemIndex]);   //主密钥号
   WKeyNo := HexToDec(ComboBox2.Items[ComboBox2.ItemIndex]);   //工作密钥号



   edtStr := trim(edit5.Text);// 主密钥
   Lstr := length(edtStr);
   for i :=0 to Lstr-1 do
   begin
     key[i] := edtStr[i+1];
   end;

   Edit8Str := Trim(Edit8.Text);
   iLen := length(Edit8Str);

   if( (iLen Mod 16 <> 0) or (iLen = 0) ) then
   begin
       //     这个条件是:当长度不为16的倍数,或是长度为0时

       edtStr := trim(Edit7.Text);   //工作密钥明文
       Lstr := length(edtStr);

       if( (Lstr Mod 16 <> 0) or (Lstr = 0) ) then
       begin
            ShowMessage( '工作密钥的长度出错,请输入的长度为16的整数倍');
            exit;

       end;

       for i :=0 to Lstr-1 do
       begin
              MKeyAsc[i] := edtStr[i+1];
       end;

       ZT_EPP_Des(MKeyAsc,key,DataOutput );   //与主密钥加密,工作密钥密文 DataOutput
       Edit8.Text :=DataOutput;

   end
   else   // 工作密钥密文
   begin
      for i :=0 to iLen-1 do
      begin
         DataOutput[i] := Edit8Str[i+1];
      end;
   end;
   
   ret :=1;
   if CheckBox3.Checked then
   begin
       Ret := ZT_EPP_PinLoadWorkKey(0,MKeyNo,WKeyNo,DataOutput,cpAuth); //0是SAM
      // SAM卡的时候工作密钥所以的密钥号是0x40~0x7F
   end
   else
   begin
     Ret := ZT_EPP_PinLoadWorkKey(iMKMode,MKeyNo,WKeyNo,DataOutput,cpAuth); //iMKMode,1,2,3是键盘
   end;

   if Ret=0 then
   begin

            sb.Panels[2].Text  :=  '下载工作密钥成功';
   end;


end;


procedure TForm1.Button4Click(Sender: TObject);      //键盘初始化按键
var
  Ret,MKeyNo,WKeyNo,iMKMode : Integer;
begin
   if ComboBox7.ItemIndex = 0 then
   begin
      Ret := ZT_EPP_PinInitialization(0);
      if Ret=0 then
      begin

            sb.Panels[2].Text  :=  '初始化成功';
      end;
   end
   else
   if ComboBox7.ItemIndex = 1 then
   begin
      Ret := ZT_EPP_PinInitialization(1);
      if Ret=0 then
      begin
            sb.Panels[2].Text  :=  '初始化成功';
      end;
   end;
end;

procedure TForm1.Button5Click(Sender: TObject); //密码加密按键
var
   MKeyNo,WKeyNo,ii,iRet,Ret : integer;
   //cardNostr : array [0..100] of char;
   DispMode,AddMode,PromMode,TimeOut :  integer;
   chKey  : char;

   chBuf : array [0..3] of char;
   chpin : array [0..20] of char;
   cardNostr :String;
   PinLen,Addi : integer;
begin
   edit10.text :='';
   fillchar(chpin,20,0);
   fillchar(chBuf,3,0);
   //设置算法参数

//----------------------------------------------------------
  // ZT_EPP_SetDesPara(2,255); //02 ff  键盘输入PIN短时,用<F>值填充PIN右边直至8字节*
//--------------------------------------


   If ComboBox14.ItemIndex = 0 then   //ASCLL方式
   begin
      AddMode :=2;

   end
   else  if ComboBox14.ItemIndex = 1 then  //ISO9564_0
   begin
      AddMode :=1;
      cardNostr :=trim(CardNo.text);
      ZT_EPP_PinLoadCardNo(Pchar(cardNostr)); //下载卡号
   end;



   //主密钥号
   MKeyNo := HexToDec(ComboBox8.Items[ComboBox8.ItemIndex]);
   WKeyNo := HexToDec(ComboBox13.Items[ComboBox13.ItemIndex]);
   ret := ZT_EPP_ActivWorkPin(MKeyNo,WKeyNo);//激活工作密钥
   if Ret = 0 then
   begin
        PinLen := StrToInt(ComboBox15.Items[ComboBox15.ItemIndex]);
        TimeOut := StrToInt(Trim(EdtTimeOut.Text));
        //启动密码键盘加密
        ZT_EPP_OpenKeyVoic(2);
        iRet := ZT_EPP_PinStartAdd(PinLen,1,AddMode,0,TimeOut);
        //iRet := ZT_EPP_PinStartAdd(6,1,2,0,TimeOut);
        Addi :=0;
        PassFlag := true;
        if iRet = 0 then
        begin
            while (PassFlag) do
            begin

               Ret := ZT_EPP_PinReportPressed(chBuf,500);
               if Ret <> 11 then
               begin
                   if(char(13)=chBuf[0] ) and (Addi>0) then  //“确认”键返回0x0D;
                   begin
                       chpin[Addi] :=chBuf[0];
                       break;
                   end
                   else if (char(8) = chBuf[0]) then  //更正键  0x08
                   begin
                      //memset(chpin,'\0',20);
                      fillchar(chpin,20,0);
                      Addi :=0;
                      continue;
                   end
                   else if (char(27) = chBuf[0]) then   //取消”键返回0x1B
                   begin
                       Addi :=0;
                       break;
                  end
                  else if(char(42) = chBuf[0]) then  //  2A  0---9
                  begin

                     chpin[Addi] :=chBuf[0];
                     edit10.text :=chpin;
                     Inc(Addi);
                     if Addi>=PinLen then break;
                  end;
               end;
              



            end;
        end;

        //ZT_EPP_OpenKeyVoic(0);
    end;
    //showmessage(chpin);


end;

procedure TForm1.Button8Click(Sender: TObject);   //读取密文按键
var
   iRet,Lstr,i : Integer;
   cpOut,DataOutput,MKeyAsc,CharAsc,chOutData : array [0..100] of char;
   edtStr,cardNostr,str1 :String;
begin
  fillchar(cpOut,sizeof(cpOut),0);
  fillchar(DataOutput,sizeof(DataOutput),0);
  fillchar(MKeyAsc,sizeof(MKeyAsc),0);
  fillchar(CharAsc,sizeof(CharAsc),0);
  fillchar(chOutData,sizeof(chOutData),0);
  iRet :=1;
  cardNostr :='0000'+trim(CardNo.text);
  {If ComboBox9.ItemIndex = 0 then
   begin
     iRet :=ZT_EPP_PinReadPin(1,cpOut);      //   工作密钥长度8字节 ,cpOut传给银联
   end
   else
   If ComboBox9.ItemIndex = 1 then
   begin
      iRet :=ZT_EPP_PinReadPin(2,cpOut);      // 01 30 工作密钥长度16字节 ,cpOut传给银联
   end
   else
   If ComboBox9.ItemIndex = 2 then
   begin
      iRet :=ZT_EPP_PinReadPin(3,cpOut);      // 01 33 工作密钥长度24字节
   end; }

   iRet :=ZT_EPP_PinReadPin(0,cpOut);  //   0前加密 ,cpOut传给银联
  ZT_EPP_DllSplitBcd(cpOut,CharAsc,8);   // 拆分字符。 CharAsc输出参数

  if iRet =0 then
  begin
     edit11.text := CharAsc;
     sb.Panels[2].Text  :=  '读取密文成功';

     //解密

     {ZT_EPP_PinUnAdd这个是键盘根据它内部的工作密钥进行解密,
     而ZT_EPP_Undes是我们自己软件解密的,必须知道工作明文是多少
     }

     edtStr := trim(Edit7.Text);   //工作密钥明文 
     Lstr := length(edtStr);
     for i :=0 to Lstr-1 do
     begin
         MKeyAsc[i] := edtStr[i+1];
     end;


     ZT_EPP_Undes(CharAsc,MKeyAsc,DataOutput);
     //一参是得到的密文,中间是工作密钥明文,后边是解密后的结果
     edit16.text := DataOutput; 

     {ZT_EPP_PinUnAdd(1,0,CharAsc, chOutData);   //这个解密不需要工作密钥明文
     edit16.text := chOutData; }

     //ISO   解密
   //  edit16.text := IntToStr(StrToInt(chOutData) Xor StrToIntLnt(cardNostr));
   {str1 := '';
     for i :=0 to 15 do
     begin
       str1 :=  str1 + IntToStr(StrToInt(chOutData[i]) xor StrToInt(cardNostr[i+1]));
     end; }
   end;





end;

procedure TForm1.Button6Click(Sender: TObject);   //取消输入按键
begin
   PassFlag := false;
   ZT_EPP_OpenKeyVoic(0);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
    edit10.Text := '';
    edit11.Text := '';
    edit16.Text := '';
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -