正在加载...

PF BLOG

一个简单的delphi对称加密算法

 

{对字符串加密(Source:源 Key:密匙)}
  function EncryptString(Source, Key: string): string;
  var
    KeyLen: integer;
    KeyPos: integer;
    Offset: integer;
    Dest: string;
    SrcPos: integer;
    SrcAsc: integer;
    Range: integer;
  begin
    KeyLen := Length(Key);
    if KeyLen = 0 then
      Key := 'delphi';
    KeyPos := 0;
    Range := 256;
    randomize;
    Offset := random(Range);
    Dest := format('%1.2x', [Offset]);
    for SrcPos := 1 to Length(Source) do
    begin
      SrcAsc := (Ord(Source[SrcPos]) + Offset) mod 255;
      if KeyPos < KeyLen then
        KeyPos := KeyPos + 1
      else
        KeyPos := 1;
      SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
      Dest := Dest + format('%1.2x', [SrcAsc]);
      Offset := SrcAsc;
    end;
    result := Dest;
  end;

  {对字符串解密(Src:源 Key:密匙)}
  function UnEncryptString(Source, Key: string): string;
  var
    KeyLen: integer;
    KeyPos: integer;
    Offset: integer;
    Dest: string;
    SrcPos: integer;
    SrcAsc: integer;
    TmpSrcAsc: integer;
  begin
    KeyLen := Length(Key);
    if KeyLen = 0 then
      Key := 'delphi';
    KeyPos := 0;
    Offset := strtoint('$' + copy(Source, 1, 2));
    SrcPos := 3;
    repeat
      SrcAsc := strtoint('$' + copy(Source, SrcPos, 2));
      if KeyPos < KeyLen then
        KeyPos := KeyPos + 1
      else
        KeyPos := 1;
      TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
      if TmpSrcAsc <= Offset then
        TmpSrcAsc := 255 + TmpSrcAsc - Offset
      else
        TmpSrcAsc := TmpSrcAsc - Offset;
      Dest := Dest + chr(TmpSrcAsc);
      Offset := SrcAsc;
      SrcPos := SrcPos + 2;
    until SrcPos >= Length(Source);
    result := Dest;
  end; 

Tags: delphi

« 上一篇 | 下一篇 »

相关文章

访客评论

  1. #1 有点坏 2011-07-11, 8:06 AM
    忽略了0和255,有一定局限性

发表评论

评论内容 (必填):