我做的几个简单加密解密,但是加解密后总有多余的几个字符,希望大家能帮我看看!!
有很多问题,小弟水平次,大家见笑拉!! 呵呵
CTOSTR():将Edit1--Edit4的全部Text内容放入 Edit7当中.
qubuzifu():是对全部可见字符进行的加密.
GMTZM(AnsiString StrSMe):是进行简单的异或加密.
RSAJJM():本来打算做RSA加密的,无赖选择的好些素数加密后都是乱码,所以选择了固定的数字,
不过字母pr加密解密后还是乱码。
Button1Click: 选择加密选择!
Edit7-〉Text:放入的是Edit1--Edit4的全部Text内容(作为将要加密的字符)
Edit5-〉Text:存放加密后的字符。
Edit6-〉Text:存放解密后的字符。
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->Items->Add("RSA法");
ComboBox1->Items->Add("全部字符");
ComboBox1->Items->Add("异或法");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RSAJJM()
{
int e=7,d=103,n=133;
CTOSTR();
char *p5=new char[Edit7->Text.Length()];
char *p6=new char[Edit7->Text.Length()];
strcpy(p5,Edit7->Text.c_str());
for(int i=0;i<Edit7->Text.Length();i++)
p6[i]=Transform(p5[i],e,n);
Edit5->Text=StrPas(p6);
char *p7=new char[Edit5->Text.Length()];
char *p8=new char[Edit5->Text.Length()];
strcpy(p7,Edit5->Text.c_str());
for(int i=0;i<Edit5->Text.Length();i++)
p8[i]=Transform(p7[i],d,n);
Edit6->Text=StrPas(p8);
}
//----------------------------------------------------------------------------
int __fastcall TForm1::Transform(char m,int k,int n)
{
long int r=1;
char bk[16];
itoa(k,bk,2);
for (unsigned int i=0;i<strlen(bk);i++)
{
r=(r*r)%n;
if (bk[i] == '1')
{
r=(r*m)%n;
}
}
return r;
}
//----------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i;
i=ComboBox1->ItemIndex;
switch(i)
{
case 0: RSAJJM(); break;
case 1: qubuzifu(); break;
case 2: yihuo(); break;
default: break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CTOSTR()
{
char str[100];
int k=0;
char *p1=new char[Edit1->Text.Length()];
char *p2=new char[Edit2->Text.Length()];
char *p3=new char[Edit3->Text.Length()];
char *p4=new char[Edit4->Text.Length()];
strcpy(p1,Edit1->Text.c_str());
for(int i=0;i<Edit1->Text.Length();i++)
str[k++]=p1[i];
strcpy(p2,Edit2->Text.c_str());
for(int i=0;i<Edit2->Text.Length();i++)
str[k++]=p2[i];
strcpy(p3,Edit3->Text.c_str());
for(int i=0;i<Edit3->Text.Length();i++)
str[k++]=p3[i];
strcpy(p4,Edit4->Text.c_str());
for(int i=0;i<Edit4->Text.Length();i++)
str[k++]=p4[i];
Edit7->Text=StrPas(str);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::qubuzifu()
{
CTOSTR();
char *p1=new char[Edit7->Text.Length()];
strcpy(p1,Edit7->Text.c_str());
for(int i=0;i<Edit7->Text.Length();i++)
p1[i]=(p1[i]-32)*7%95+32;
Edit5->Text=StrPas(p1);
char *p2=new char[Edit5->Text.Length()];
strcpy(p2,Edit5->Text.c_str());
for(int i=0;i<Edit5->Text.Length();i++)
{
for(int j=0;j<7;j++)
{
if(((p2[i]-32)+j*95)%7==0)
{
p2[i]=((p2[i]-32)+j*95)/7+32;
break;
}
}
}
Edit6->Text=StrPas(p2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::yihuo()
{
CTOSTR();
Edit5->Text=GMTZM(Edit7->Text);
Edit6->Text=GMTZM(Edit5->Text);
}
//---------------------------------------------------------------------------
AnsiString __fastcall TForm1::GMTZM(AnsiString StrSMe)
{
AnsiString astrEcode;
AnsiString *Str =& StrSMe;
static const char i_UserKey[5] = {0x2A, 0x2B, 0x3D, 0x13, 0x4F};
if (Str->Length() > 0)
for (int i = 1;i <= Str->Length(); i++)
astrEcode = astrEcode + (char)(*Str->SubString(i,1).c_str() ^ (i+i_UserKey[i%5]));
return astrEcode;
}
//---------------------------------------------------------------------------