CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

请教如何加密解密字符串

楼主zsgbox(天心难测)2005-05-11 23:54:18 在 C++ Builder / 基础类 提问

请诸位达人能否发给在下一个加密\解密程序的操作源码或相关控件,作用是加密字符串,加密方法MD5,DES,什么都行,有的朋友说CB自带MD5,可惜我找不着,我想把从用户那里获取的硬盘,CPU,及网卡ID给加密了,传到这边来后再解密,如果诸位达人有这样的成形代码一并发给在下,非常感谢! 问题点数:100、回复次数:9Top

1 楼cczlp(不惑)回复于 2005-05-12 07:45:46 得分 10

MD5是用来进行信息认证(数字签名)的,不能进行加密.不论多长的信息,一个字节或10G字节,  
  MD5都提取16字节的摘要.根据这16字节无法还原原来数据,否则企不是可以把整个硬盘数据压缩成16字节.Top

2 楼cczlp(不惑)回复于 2005-05-12 07:47:46 得分 0

DES在网上有大量源码,可以搜索一下.3DES的也有Top

3 楼happyct(绿叶对大树的情怀)回复于 2005-05-12 08:57:56 得分 50

最简单的一段:  
  String     __fastcall   TGetMsgForm::JiaMi(String   SourceStr)     //加密  
  {  
        String   RetStr="";  
        for   (int   i=1;i<=SourceStr.Length();i++)  
              {  
                    char   c=SourceStr[i];  
                    int   h=(c>>4)&0xf;     //   高4位  
                    int   l=c&0xf;               //   低4位  
                    RetStr=RetStr+(char)('a'+h)+(char)('a'+l);  
              }  
        return(RetStr);  
  }  
   
  String     __fastcall   TForm1::JieMi(String   SourceStr)     //   解密  
  {  
        String   RetStr="";  
        for   (int   i=1;i<=SourceStr.Length();i=i+2)  
              {  
                    int   h=(SourceStr[i]-'a');  
                    int   l=(SourceStr[i+1]-'a');  
                    char   c=(h<<4)+(l&0xf);  
                    RetStr=RetStr+c;  
              }  
        return(RetStr);  
  Top

4 楼netsys2(来电!)回复于 2005-05-12 10:03:06 得分 10

用俺做的控件吧:  
   
  http://community.csdn.net/Expert/TopicView.asp?id=3818406Top

5 楼NetSpider9804040(网络蛛蛛)回复于 2005-05-12 10:11:15 得分 0

用MD5,网上应该有很多C的加密单元,将其加入你的工程中,就Ok啦!Top

6 楼zsgbox(天心难测)回复于 2005-05-12 10:52:48 得分 0

To:   netsys2(来电!)是免费的吗?Top

7 楼netsys2(来电!)回复于 2005-05-12 11:49:22 得分 0

免费的!Top

8 楼h98458(零点起飞)回复于 2005-05-12 13:16:58 得分 20

下面的程序已经在Bcb5下通过  
   
  #include    
  #pragma   hdrstop  
   
  #include   "Unit1.h"  
  //---------------------------------------------------------------------------  
  #pragma   package(smart_init)  
  #pragma   resource   "*.dfm"  
  TForm1   *Form1;  
  AnsiString   PassWord(AnsiString   cz0003_6,int   cz0003_a)  
  {  
  //   字符串加解密处理函数  
  //   参数说明:cz0003_6   ---   待处理字符串  
  //   cz0003_a   ---   处理方式(1.加密;-1.解密)  
  AnsiString   cz0003_0,cz0003_1,cz0003_2,cz0003_3,cz0003_4,cz0003_8;  
  int   cz0003_7,cz0003_5,cz0003_9;  
  AnsiString   s1,s2;  
   
  cz0003_0="西藏大昌实业集团";  
  cz0003_1="大昌网络有限公司";  
  cz0003_2="旅游产品分销系统";  
  cz0003_3="版本   Ver   1.0";  
  cz0003_4=cz0003_0+cz0003_1;   //   加密字符串  
  cz0003_5=cz0003_4.Length();   //   加密字符串长度  
  cz0003_8="";   //   加密后的字符串  
  cz0003_9=0;  
  if(cz0003_a==-1)  
  {  
  for(cz0003_7=1;cz0003_7<=cz0003_6.Length();cz0003_7++)  
  {  
  //s1:=copy(cz0003_6,cz0003_7,1);  
  s1   =   cz0003_6.SubString(cz0003_7,1);  
  //s2:=copy(cz0003_4,(cz0003_7-1)   mod   cz0003_5+1,1);  
  s2   =   cz0003_4.SubString((cz0003_7-1)   %   cz0003_5+1,1);  
  cz0003_9=int(s1[1])-int(s2[1]);  
  if(cz0003_9<0)  
  cz0003_8=cz0003_8+String(char(cz0003_9+256));  
  else  
  cz0003_8=cz0003_8+String(char(cz0003_9));  
  }  
  }else{   //   加运算  
  for(cz0003_7=1;cz0003_7<=cz0003_6.Length();cz0003_7++)  
  {  
  s1=cz0003_6.SubString(cz0003_7,1);  
  s2=cz0003_4.SubString((cz0003_7-1)   %   cz0003_5+1,1);  
  cz0003_9=int(s1[1])+int(s2[1]);  
  if(cz0003_9>255)  
  cz0003_8=cz0003_8+String(char(cz0003_9-256));  
  else  
  cz0003_8=cz0003_8+String(char(cz0003_9));  
  }  
  }  
  cz0003_6=cz0003_8;  
  return   cz0003_8;  
  }  
   
  //---------------------------------------------------------------------------  
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
  :   TForm(Owner)  
  {  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::Button1Click(TObject   *Sender)  
  {  
  Label1->Caption=PassWord("I   love   you",1);  
   
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::Button2Click(TObject   *Sender)  
  {  
  Label1->Caption=PassWord(Label1->Caption,-1);  
  }  
  //-----------------------------------------------------------------  
  Top

9 楼weill(每天提一问,一天学一点)回复于 2005-05-12 15:52:21 得分 10

对楼主本人以菜鸟的立场提出以下建议:  
  1、不要用什么MD5啊、DES啊,太过麻烦,会累死人的。  
  2、先把字串中的每一个字母转成ASCII的十六进制,然后再给它来一次运算(规则当然是自个定了),这个运算可以是加入一个16位的或更高位的密匙,得出新的十六进制数就OK(如进行位运算)。为了方便记录和传输(可能会因为得出的新的十六进制数里有特殊的字符,如文本结束符等),建议再把这个十六进制数转成字符串,这样,记录和输入时就只有0到F一些字母了,不会产生歧意。  
  3、有人怕固定的密匙不保险,那么,可以在运算上下功夫,如每次加密16位,并且第二位数据和第一位数据的结果进行一定的关联等等,我想你还可以想出更好的办法。这样,就很难猜出密匙了。  
  再复杂的办法也可以用上面的思路去办。  
  4、还是想说,没有解不开的密码,只是让解的人大花脑筋和时间罢了,哈哈。  
  Top

相关问题

  • 如何对字符串加密解密?(des,md5等等都可以)
  • 在vb.net下如何实现字符串的加密解密。。。。请帮忙。。。
  • 我要字符串加密解密源代码!
  • c中字符串加密解密的问题
  • 跪求!!!字符串加密解密函数
  • 有没有这样的字符串加密解密算法!
  • 谁有文件加密/解密,或者字符串加密/解密的代码?急~~
  • 求一段加密解密代码,只要能对字符串进行简单的加密解密就行。
  • 在winform中加密解密一个字符串用什麽方法??
  • 求对字符串加密解密的源代码。过年了,马上结帖!

关键词

  • 加密
  • 解密
  • 数据
  • cz0003
  • 字符串
  • retstr
  • fastcall
  • tform
  • 密匙
  • md5

得分解答快速导航

  • 帖主:zsgbox
  • cczlp
  • happyct
  • netsys2
  • h98458
  • weill

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo