我做的几个简单加密解密,但是加解密后总有多余的几个字符,希望大家能帮我看看!!

Andrionda 2004-12-27 02:58:46
有很多问题,小弟水平次,大家见笑拉!! 呵呵

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;
}
//---------------------------------------------------------------------------
...全文
308 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andrionda 2005-01-06
  • 打赏
  • 举报
回复
才看出来,其实CTOSTR() 函数的功能可以这样实现
我真是晕拉
AnsiString str;
str=Edit1->Text+Edit2->Text+
Edit3->Text+Edit4->Text;
Edit7->Text=str;
「已注销」 2004-12-30
  • 打赏
  • 举报
回复
要对尾字符做处理才可以
Andrionda 2004-12-30
  • 打赏
  • 举报
回复
我试了一下,原因出在CTOSTR() 函数上,加密解密都对着呢!
还有就是RSA解密后的字符‘6’成了‘?’ 这该怎么解决呢,我把好些素数都试过拉
Andrionda 2004-12-30
  • 打赏
  • 举报
回复
现在即使里面没有字符,经过处理以后也会产生新字符,这是怎么回事啊?
Andrionda 2004-12-29
  • 打赏
  • 举报
回复
sangxiao() 兄:谢谢了先!!呵呵
sangxiao 2004-12-28
  • 打赏
  • 举报
回复
lz7777@etang.com
sangxiao 2004-12-28
  • 打赏
  • 举报
回复
to PLYAT(沙漠狐) :

void __fastcall TForm1::CTOSTR()
{
char *str;
int count;
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()];
count = Edit1->Text.Length() + Edit2->Text.Length() +
Edit3->Text.Length() +Edit4->Text.Length();
str = new char[count];
.......
}


我已经验证在全部字符加密好用.
Andrionda 2004-12-28
  • 打赏
  • 举报
回复
sangxiao: 用动态数组该怎么做? 还得麻烦你不吝赐教。谢谢
Andrionda 2004-12-27
  • 打赏
  • 举报
回复
我给大家都发过去 帮小弟看看! 谢谢了先
我妹是: plyat@163.com
ccrun.com 2004-12-27
  • 打赏
  • 举报
回复
挖卡卡,给俺来一份。
ccrun.com 2004-12-27
  • 打赏
  • 举报
回复
test
netsys2 2004-12-27
  • 打赏
  • 举报
回复
如果不是非得用公钥体制,

可留妹,给你发一个AES的。
kinglh 2004-12-27
  • 打赏
  • 举报
回复
帮你UP
sangxiao 2004-12-27
  • 打赏
  • 举报
回复
void __fastcall TForm1::CTOSTR()
{
char str[100];
.....
}

这个数组str建议改成动态生成的,长度为(Edit1-〉Text的长度+ Edit2-〉Text的长度+Edit3-〉Text的长度+Edit4-〉Text的长度),这样的话应该没问题。
第1章 概述 问题1-1:“主机”和“计算机”一样不一样? 问题1-2:能否说:“电路交换和面向连接是等同的,而分组交换和无连接是等同的”? 问题1-3:因特网使用的IP协议是无连接的,因此其传输是不可靠的。这样容易使人们感到因特网很不可靠。那么为什么当初不把因特网的传输设计成为可靠的?在教材中1.2.1节提到这种新型计算机网络必须满足的要求有一条是“能够非常可靠地传送数据”。但因特网的网络层使用IP协议,它只能提供不可靠的数据传输。那么这里有没有什么矛盾? 问题1-4:在具有五层协议的体系结构中,如果下面的一层使用面向连接服务或无连接服务,那么在上面的一层是否也必须使用同样性质的服务呢?或者说,是否我们可以在各层任意使用面向连接服务或无连接服务呢? 问题1-5:在运输层应根据什么原则来确定应当使用面向连接服务还是无连接服务? 问题1-6:在数据链路层应根据什么原则来确定应当使用面向连接服务还是无连接服务? 问题1-7:TCP/IP的体系结构到底是四层还是五层? 问题1-8:我们常说“分组交换”。但又常说“路由器转发IP数据报”或“路由器转发帧”。究竟“分组”一词应当用在什么场合? 问题1-9:到商店购买可一个希捷公司生产的80 G的硬盘。安装到电脑上以后用WINDOWS的资源管理器发现在该磁盘的“属性”中只有74.5 G。是不是商店出了差错? 问题1-10:在教材的1.4.1节中有这样一段话:人们愿意将“带宽”作为数字信道的“数据率”的同义语。这样说有何根据? 问题1-11:有时可听到人们将“带宽为10 Mb/s的以太网”说成是“速率(或速度)为10 Mb/s的以太网”或“10兆速率(或速度)的以太网”。试问这样的说法正确否? 问题1-12:有人说,宽带信道相当于高速公路车道数目增多了,可以同时并行地跑更多数量的汽车。虽然汽车的时速并没有提高(这相当于比特在信道上的传播速率没有提高),但整个高速公路的运输能力却增多了,相当于能够传送更多数量的比特。这种比喻合适否? 问题1-13:如果用时延带宽积管道来比作传输链路,那么是否宽带链路对应的时延带宽积管道就比较宽呢? 问题1-14:网络的吞吐量与网络的时延有何关系? 问题1-15:什么是“无缝的”、“透明的”和“虚拟的”? 问题1-16:在教材的1.5.2节提到协议有三个要素,即语法、语义和同步。语义是否已经包括了同步的意思? 问题1-17:为什么协议不能设计成100%可靠的? 问题1-18:什么是因特网的穆尔定律? 问题1-19:局域网、广域网和公用网、专用网有什么关系? 问题1-20:信道的利用率是否越高越好? 问题1-21:怎样理解教材中图1-8所示的椭圆形表示的各种服务提供者?这些ISP都在具体的什么位置? 问题1-22:在计算机网络中的结点是指主机还是指路由器? 问题1-23:ISO与OSI有何不同? 问题1-24:我们常听说“要增加政府机构办事的透明度”。意思是:政府机关的许多办事程序和步骤应当向群众公开,让大家看得见。而计算机网络所讨论的透明传输,是指比特流看不见电路的存在。这样看来,两种“透明”的意思很不一样。应当怎样理解? 问题1-25:怎样才能知道哪些RFC文档已经成为因特网的正式标准(草案或建议标准)? 问题1-26:怎样知道一个RFC文档是否被改为陈旧的? 第2章 物理层 问题2-1:“规程”、“协议”和 “规约”都有何区别? 问题2-2:在许多文献中经常见到人们将“模拟”与“仿真”作为同义语。那么,“模拟信道”能否说成是“仿真信道”? 问题2-3:为什么电话信道的标准带宽是3.1 kHz? 问题2-4:奈氏准则和香农公式的主要区别是什么?这两个公式对数据通信的意义是什么? 问题2-5:传输媒体是物理层吗?传输媒体和物理层的主要区别是什么? 问题2-6:同步(synchronous)和异步(asynchronous)的区别是什么? 问题2-7:同步通信和异步通信的区别是什么? 问题2-8:比特同步和帧同步的区别是什么? 问题2-9:教材的表2-4的OC和STS有什么区别?例如OC-3和STS-3的数据率是一样的,为什么要使用两种表示方法?有的文献还使用如OC-3C的表示方法,这有区别吗? 问题2-10:ATM是异步传递方式。是否ATM方式与同步通信完全无关? 第3章 数据链路层 问题3-1:在1999年4月出版的《计算机网络》(第2版)的1.3.2节中有这样的话: “(2) 数据链路层 数据链路层的任务是在两个相邻结点间的线路上无差错地传送以帧(frame)为单位的数据。……这样,数据链路层就把一条有可能出差错的实际链路,转变成为让网络层向下看起来好像是一条不出差错的链路。” 但在2003年出版的《计算机网络》(第4版)中对数据链路层就改变了这种提法。

551

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧