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

📄 cbdestool.~cpp

📁 RSA C++源代码DEMO,附加DESMD5等众多算法
💻 ~CPP
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
#include "cbDestool.h"
#include "cardutil.h"
#include "crypto.h"

char *spKey = "Key:";
char *spDes = "Output:";
char *spMac = "I.V.:";
char *spDiv = "Factor:";
char *spData= "Data:";
char *spDatax1 = "Data1:";
char *spDatax2 = "Data2:";

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TcfDES *cfDES ;
//---------------------------------------------------------------------------
__fastcall TcfDES::TcfDES(TComponent* Owner)
    : TForm(Owner)
{
    cbKey->Items->Clear();
    cbData->Items->Clear();
    cbOut->Items->Clear();
}
//---------------------------------------------------------------------------
void  TcfDES::addToHistory()
{
    cbKey->Items->Add(cbKey->Text);
    cbData->Items->Add(cbData->Text);
    cbOut->Items->Add(cbOut->Text);
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::rbDESClick(TObject *Sender)
{
    Label1->Caption = spKey;
    Label2->Caption = spData;
    Label3->Caption = spDes;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::rbMACClick(TObject *Sender)
{
    Label1->Caption = spKey;
    Label2->Caption = spData;
    Label3->Caption = spMac;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::rbDiversifyClick(TObject *Sender)
{
    Label1->Caption = spKey;
    Label2->Caption = spDiv;
    Label3->Caption = spDes;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::rbXORClick(TObject *Sender)
{
    Label1->Caption = spDatax1;
    Label2->Caption = spDatax2;
    Label3->Caption = spDes;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::cbOutKeyPress(TObject *Sender, char &Key)
{
    if(rbMAC->Checked) Label3->Caption = spMac;
}
//---------------------------------------------------------------------------
void TcfDES::dispmessage(char *msg)
{
    cbOut->Text = msg;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::bExecuteClick(TObject *Sender)
{
    int  dbk,len,kl, enMode;
    char key[32],data[2048],res[2048],buf[2048];

    unsigned char pN[2048]={0};
    unsigned char pE[2048]={0};
    unsigned char pD[2048]={0};
    unsigned char pData[2048]={0};
    unsigned char pOUT[2048]={0};

 //   rsa_keygen(int bits, char *pN, char *pE, char *pD)
#if 0
    rsa_keygen(1024,pN,pE,pD);

        FILE *fp;
        fp=fopen("rsa.log","at");
        for(int iLoop=0;iLoop<128;iLoop++)
        {
             fputs("0x",fp);
             memset(key,0,sizeof(key));
             memcpy(key,pN+iLoop*2,2);
             fputs(key,fp);
             fputs(", ",fp);
             if(!((iLoop+1)%8))
             {
 //               if(iLoop!=0)
                        fputs("\n",fp);
             }

        }
        fputs("\n",fp);

        for(int iLoop=0;iLoop<128;iLoop++)
        {
             fputs("0x",fp);
             memset(key,0,sizeof(key));
             memcpy(key,pD+iLoop*2,2);
             fputs(key,fp);
             fputs(", ",fp);
             if(!((iLoop+1)%8))
             {
                fputs("\n",fp);
             }

        }
        fputs("\n",fp);


        fputs(pN,fp);
        fputs("\n",fp);
        fputs(pD,fp);
        fputs("\n",fp);
        fputs(pE,fp);
        fputs("\n",fp);


        fclose(fp);
        

#endif
#if 1
//m&w
    strcpy(pN,"9faae6cf19aca85fca341ead506676290563a91b33bd902af61690c17b060150f52928ce014716246479dc2f5781dde2fcd6134201d31461f6c6a8dadc071eebfe0c279d9282b16acf1802729f3886de1cde0488637ba17c50d1976788dce441546d0cf601670d5bd4c0f87867c943c2e0dfcd043c9e23262153309794a3e0a1");
    strcpy(pE,"00010001");
    strcpy(pD,"010C2759124ECE3A327A27582781D355F14DA9A9F81F845597D213447C49EE0F216075912CD74F92C38626A140A563B0C658BA55263EE8949F2A30C6A95C627EEFA8E58522B65102B8E2D2580C83238B002876088BBC686D12AA859B8513B7A1E33198B2F290DFD5EECFAAC03A57C6948A02F2366C79BAF18A2243210E34BA23");
#endif

#if 0
//ds5250
    strcpy(pN,"CDEDA3CEEC6CFDAC18FC835115A558E7487F5C01A1627A9659A6EDB8E9C78513D4359F5F745D7CFED594CFD5A5C8E4B2E0356557F2E088E2BDEEB709CBAD563F817AC2D5F3427AEC4B2083233AB274BCB2B3B98E8C894762AFE4ED95B718F682E2BF4EFFB1E0A3F17DF37C5F0F54FF55AE71F25504E3BC54EBFEFA8DC11EA9AA");
    strcpy(pE,"010001");
    strcpy(pD,"010C2759124ECE3A327A27582781D355F14DA9A9F81F845597D213447C49EE0F216075912CD74F92C38626A140A563B0C658BA55263EE8949F2A30C6A95C627EEFA8E58522B65102B8E2D2580C83238B002876088BBC686D12AA859B8513B7A1E33198B2F290DFD5EECFAAC03A57C6948A02F2366C79BAF18A2243210E34BA23");
#endif


#if 0
//g&d
    strcpy(pN,"C024D0A8F5347224FFF8686EC2FEE570751B1AB717418C859581BC4F58E7725A168B877B03365B6592B2B66B519C3F5FF37F1E7BDEB2F229B03BE2505C843FFDFEE2F72755D98AD43B40DACC1CC6AEBA4491DF5F1D0C83F898DCAC861235BDCFC91E6382E85D77E3D1AB1C492F1143F5A0EA44BCBEB016E929246CDF6DAC8B67");
    strcpy(pE,"10001");
    strcpy(pD,"2A426E9A1A84146ECAD589B282B4A925D8BBC35E6D80FF350A32E485D719E06EABF2B83377FB6692AA771FE3EEA91CCF2FB0CFB592BF6CBF7A81513F3779E6D0C5DE13AC30D3E25043D4C1C0E80D6AD5193966DC5A1DCC1321520CE60A4D72B984F9E69AFFA7768224924D60699C3357EA662466D2DB4CD944CB10D5A6779F21");
#endif


    //rsa_encrypt(char *pN, char *pE, char *pData,char *pOUT );
    strcpy(pData,"1111");
    rsa_encrypt(pN, pE, pData,pOUT );

    //rsa_decrypt(char *pN, char *pD, char *pData, char *pOUT );
    memset(pData,0,sizeof(pData));
    rsa_decrypt(pN, pD, pOUT,pData);





    len = cbKey->GetTextLen()+1;
    cbKey->GetTextBuf(buf,len);
    trimspace(buf);
    len = strlen(buf);

    if (rbEncipher->Checked) enMode = DES_E;
    else enMode = DES_D;

    if ( rbDES->Checked ) {

       kl = 1;
       kl *= 16;
       if ( len != kl) {
          dispmessage("DES key: 8 bytes; 3DES key: 16 byte");
          return;
       }
       kl /=2;
       asc2bcd(buf,key,kl);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len != 16 ) {
          dispmessage("Data must be 8 bytes");
          return;
       }
       asc2bcd(buf,data,8);

       qdes(key,data,res,enMode);

       bcd2ascb(res,buf,8);
    } else if (rbMAC->Checked) { /* MAC*/
       if ( len != 16 && len !=32) {
          dispmessage("Key must be 8/16 bytes");
          return;
       }

       if ( len == 16 ) dbk = 0; else dbk = 1;

       if ( dbk) asc2bcd(buf,key,16);
       else asc2bcd(buf,key,8);

       // get data
       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf)/2;
       asc2bcd(buf,data,len);
       len = padding(data,len);

       if (1/*rbPBOC->Checked*/) {
          kl = cbOut->GetTextLen()+1;
          cbOut->GetTextBuf(buf,kl);
          trimspace(buf);
          kl = strlen(buf);
          if (kl!=16) {
             dispmessage("Vector must be 8 bytes");
             return;
          }
          asc2bcd(buf,res,8);
       } else memset(res,0x0,8);

       for(kl=0;kl<len;kl+=8) {
          xorblock(res,data+kl);
          qdes(key,res,buf,DES_E);
          memcpy(res,buf,8);
       }

       if ( dbk ) {
          qdes(key+8,res,buf,DES_D);
          qdes(key,buf,res,DES_E);
       }
       bcd2ascb(res,buf,8);
    } else if ( rbXOR->Checked ) { /* XOR */
       if ( len!=16) {
          dispmessage("Data Length must be 8 bytes");
          return;
       }

       asc2bcd(buf,key,8);

       kl = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,kl);
       trimspace(buf);
       kl = strlen(buf);
       if ( len != kl ) {
          dispmessage("Data1 and data2's length must be same");
          return;
       }

       asc2bcd(buf,data,8);
       xorblock(key,data);
       bcd2ascb(key,buf,8);
    } else if ( rbDiversify->Checked ) { /* diversify */
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len != 16 ) {
          dispmessage("Factor must be 8 bytes");
          return;
       }
       asc2bcd(buf,data,8);

       tripledes(key,data,res,DES_E);
       memcpy(buf,res,8);

       notblock(data);
       tripledes(key,data,res,DES_E);
       memcpy(buf+8,res,8);

       memcpy(res,buf,16);
       bcd2ascb(res,buf,16);
    } else if (rbEncrypt->Checked && enMode == DES_E){  /* encrypted */
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       asc2bcd(buf,&data[1],len/2);
       data[0] = len/2; // Ld
       if (((len/2+1)%8) > 0 )
          len = padding(data,len/2+1);
       else len = len/2+1;

       for(kl =0; kl<len; kl+=8)
           tripledes(key,&data[kl],&res[kl],DES_E);
       bcd2ascb(res,buf,len);
    } else if (rbEncrypt->Checked && enMode == DES_D ) { /* Decrypted */
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len %8 ) {
          dispmessage("Data must be 8X bytes");
          return;
       }
       len = len /2;
       asc2bcd(buf,data,len);

       for(kl =0; kl<len; kl+=8)
           tripledes(key,&data[kl],&res[kl],DES_D);
       bcd2ascb(res,buf,len);
    } else if ( eDESCBC->Checked&& enMode == DES_E ) { // 3DES CBC
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len %8 ) {
          dispmessage("Data must be 8X bytes");
          return;
       }
       len = len /2;
       asc2bcd(buf,data,len);

       memset(buf,0x0,8);
       for(kl =0; kl<len; kl+=8) {
          xorblock(buf,&data[kl]);
          tripledes(key,buf,&res[kl],DES_E);
          memcpy(buf,&res[kl],8);
       }
       bcd2ascb(res,buf,len);
    } else if ( eDESECB->Checked ) { // 3DES ECB  en
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len %8 ) {
          dispmessage("Data must be 8X bytes");
          return;
       }
       len = len /2;
       asc2bcd(buf,data,len);

       for(kl =0; kl<len; kl+=8) {
          tripledes(key,&data[kl],&res[kl],enMode);
       }
       bcd2ascb(res,buf,len);

    } else if ( eDESCBC->Checked&& enMode == DES_D ) { // 3DES CBC  de
       if ( len != 32) {
          dispmessage("Key must be 16 bytes");
          return;
       }
       asc2bcd(buf,key,16);

       len = cbData->GetTextLen()+1;
       cbData->GetTextBuf(buf,len);
       trimspace(buf);
       len = strlen(buf);
       if ( len %8 ) {
          dispmessage("Data must be 8X bytes");
          return;
       }
       len = len /2;
       asc2bcd(buf,data,len);

       memset(buf,0x0,8);
       for(kl =0; kl<len; kl+=8) {

          tripledes(key,&data[kl],&res[kl],DES_D);

          xorblock(&res[kl],buf);

          memcpy(buf,&data[kl],8);
       }

       bcd2ascb(res,buf,len);

    }

    Label3->Caption = spDes;
    cbOut->Text = buf;
    addToHistory();
}
//---------------------------------------------------------------------------
void  TcfDES::echolength(char *s)
{
    short  rc;
    char   hexs[8];

    strcpy(dvbuf,s);
    trimspace(dvbuf);
    rc = strlen(dvbuf);
    hexs[0] = rc/2;
    bcd2asc(hexs,dvbuf,1);

    if (rc%2) {
       dvbuf[2]='*';   dvbuf[3]='\0';
    }
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::cbKeyChange(TObject *Sender)
{
    echolength(cbKey->Text.c_str());
    ecK->Caption = dvbuf;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::cbDataChange(TObject *Sender)
{
    echolength(cbData->Text.c_str());
    ecD->Caption= dvbuf;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::cbOutChange(TObject *Sender)
{
    echolength(cbOut->Text.c_str());
    ecO->Caption= dvbuf;
}
//---------------------------------------------------------------------------
void __fastcall TcfDES::rbEncryptClick(TObject *Sender)
{
    Label1->Caption = spKey;
    Label2->Caption = spData;
    Label3->Caption = spDes;
}
//---------------------------------------------------------------------------


⌨️ 快捷键说明

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