用加密算法就可以了,[email protected]

解决方案 »

  1.   

        
    CSDN首页 | 新闻聚焦 | 共享软件 | 俱乐部 | 开发文档 | 专家门诊 | 招聘求职 | Linux园地 | 程序员杂志 
    --------------------------------------------------------------------------------
     
    我要回复 | 我感兴趣 | 打印贴子 | 推荐给朋友 | 关闭窗口  
    主  题:对文本进行简单的加密...
    作  者:hmf9
    所属论坛:Delphi
    问题点数:50
    回复次数:15
    发表时间:2001-12-11 13:18:37
     
      
      用ORD取得ASCII字符的代码后再加一个数值最后转换回CHAR,是不是不能超过255,如果超过了会出现什么情况?文件体积会变大吗? 
    回复贴子: 
    回复人: myxfang(小方)(大富翁银行~业务员~) (2001-12-11 13:23:02)  得5分 
    可以取余数 n mod 255  
    回复人: crapex(编程浪子) (2001-12-11 13:23:13)  得5分 
    一种意见:
    加一个数值以后,再保存的时候,用整型,而不用字符型,这样就和255无关了。
    我自己用C做过的,就是这个原理,文件会扩大几倍。  
    回复人: crapex(编程浪子) (2001-12-11 13:25:35)  得0分 
    取模以后,如果要恢复(解密)就会有很大问题,因为可能不同的字符,对应同样的密码,有相同的加密字符。  
    回复人: ihihonline(小小) (2001-12-11 13:28:53)  得5分 
    也是刚刚学的,哈哈
    const
      cKey = '随便你了';function Encrypt(mStr: string; mKey: string): string;
    var
      I, J: Integer;
    begin
      J := 1;
      Result := '';
      for I := 1 to Length(mStr) do begin
        Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
        if J + 1 <= Length(mKey) then
          Inc(J)
        else J := 1;
      end;
      {自己加步骤}
    end;function Decrypt(mStr: string; mKey: string): string;
    var
      I, J: Integer;
    begin
      J := 1;
      Result := '';
      {自己加步骤}
      for I := 1 to Length(mStr) do begin
        Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
        if J + 1 <= Length(mKey) then
          Inc(J)
        else J := 1;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);
    end;
     
    回复人: zswang(伴水)(伤心中) (2001-12-11 13:30:13)  得15分 
    function f(mStr: string; mKey: string): string;
    var
      I, J: Integer;
    begin
      Result := '';
      J := 1;
      for I := 1 to Length(mStr) do begin
        Result := Result + Chr(Ord(mStr[I]) xor Ord(mKey[J]));
        if J + 1 < Length(mKey) then
          Inc(J)
        else J := 1;
      end;
    end;  
    回复人: zswang(伴水)(伤心中) (2001-12-11 13:32:04)  得0分 
    嘻嘻嘻嘻嘻嘻嘻嘻嘻
    嘻嘻嘻小小嘻嘻嘻嘻
    嘻嘻嘻嘻嘻嘻嘻嘻嘻  
    回复人: kevin_gao(困了!累了!睡觉了!) (2001-12-11 13:37:48)  得0分 
    收藏收藏!  
    回复人: z_x_b(长弓落日金沙丘) (2001-12-11 13:39:45)  得15分 
    为什么不用XOR,运算简单、可逆,且安全,微软也用,
    不存在超出255的问题!  
    回复人: szfszf(samllcat) (2001-12-11 13:41:04)  得5分 
    做一个环,超过255就从0开始,文件不会变大  
    回复人: zzllabc(龙) (2001-12-11 13:47:32)  得0分 
     z_x_b(狂龙)说的一点不错:我自己在做口令简单加密时就用的XOR
    为什么不用XOR,运算简单、可逆,且安全,微软也用,
    不存在超出255的问题! 
     
    回复人: hmf9(hmf9) (2001-12-11 13:56:02)  得0分 
    谢各位,XOR我也有用过,现在只是想讨论一下这个问题而已,而不是寻找有效的加密方法
    另:用XOR的话,能不能稍微复杂一点,而不仅仅只是安位异或,这样岂不是别人很容易进行反向解密?  
    回复人: zswang(伴水)(伤心中) (2001-12-11 13:59:58)  得0分 
    mKey不一样!
    你还可以再用不同的mKey加密多次(只要你喜欢)
    密码当然都可以破
    可以不是不需要时间的
    他破一种的时间
    我可以玩出一百种加密出来
    看谁更麻烦  
    回复人: hmf9(hmf9) (2001-12-11 14:02:18)  得0分 
    说的是,我脑袋刚才一时还没转过来,谢谢了,给分  
    回复人: zswang(伴水)(伤心中) (2001-12-11 14:06:38)  得0分 
    function Encrypt(mStr: string; mKey: string): string;
    var
      I, J: Integer;
    begin
      J := 1;
      Result := '';
      for I := 1 to Length(mStr) do begin
        Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
        if J + 1 <= Length(mKey) then
          Inc(J)
        else J := 1;
      end;
      {自己加步骤}
    end;function Decrypt(mStr: string; mKey: string): string;
    var
      I, J: Integer;
    begin
      J := 1;
      Result := '';
      {自己加步骤}
      for I := 1 to Length(mStr) do begin
        Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
        if J + 1 <= Length(mKey) then
          Inc(J)
        else J := 1;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    const
      cKey1 = '谁想试试怎么破';
      cKey2 = '我可不愿意这样玩(1)我可不愿意这样玩(2)我可不愿意这样玩(3)';
      cKey3 = 'Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);';
    var
      S: string; //加密后的字符
    begin
      S := Encrypt(Encrypt(Encrypt(Memo1.Text, cKey1), cKey2), cKey3);
      ShowMessage(S);
      Memo2.Text := Decrypt(Decrypt(Decrypt(S, cKey3), cKey2), cKey1);
    end; 
    回复人: leeky(雅痞·千年虫) (2001-12-11 14:09:10)  得0分 
    这种方法很好,可惜没给你提供完整代码:)
    逆运算也没给出实在对不起呵呵
    就算算法给破了也不太有问题。
    key1:=****;
    para1:=****;
    para2:=****;
    以上三个参数你自己记住就是了。
    resultStr:='';
          key1:=****;
          para1:=****;
          para2:=****;
                  //解密密钥
            for i:=1 to 9 do
              begin
                Ch:=OriginStr[size-9+i];
                Result:=char(byte(Ch)xor(key1 shr 8));
                key1:=(byte(Ch)+key1)*para1+para2;            resultStr:=resultStr+Result;
              end;   
    --------------------------------------------------------------------------------
     
    我要回复:(请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德)   
    返回问题 | 关闭窗口   
       
     
               
    美达美简介 广告服务 英语步步高 程序员大本营 百联美达美科技有限公司  版权所有