⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_crypt.pas

📁 加解密
💻 PAS
字号:
unit U_Crypt;

interface
USES
    Classes, SysUtils;
const
     C1 = 52845;             //此二常量用于生成随机数
     C2 = 22719;

     SA:array[0..61] of char=
          ('0','1','2','3','4','5','6','7','8','9',
           'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
           'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');

function Encrypt( S: String; Key: Word): String;   //加密函数声明
function Decrypt( S: String; Key: Word): String;   //解密函数声明
function Encrypt2( S: String; Key: Word): String;   //加密函数2声明
function Decrypt2( S: String; Key: Word): String;   //解密函数2声明

implementation

function Encrypt( S: String; Key: Word): String;
var
  I: Integer;
  j: Integer;
begin
  Result := S;
  for I := 1 to Length(S) do
  begin
    Result[I] := char(byte(S[I]) xor (Key shr 8));//将密钥移位后与字符异或
    Key := (byte(Result[I]) + Key) * C1 + C2;  //产生下一个密钥
  end;
  s:=Result;
  Result:='';
  for i:=1 to length(s) do
  begin
    j:=Integer(s[i]);                  //提取字符  ord(strtoint(s[i]));
    //j := ord(s[i]);
    Result:=Result + Char(65+(j div 26))+Char(65+(j mod 26)); //将字符转化为两个字母保存
  end;
end;

function Decrypt( S: String; Key: Word): String;
var
  I: Integer;
  j: Integer;
begin
  result:='';
  for i:=1 to (length(s) div 2) do    //将字符串两个字母一组进行处理
  begin
    j:=(Integer(s[2*i-1])-65)*26;   //将两个字母重新转化为一个字符
    j:=j+(Integer(s[2*i])-65);
    result:=result + Char(j);       //追加字符,还原字符串
  end;
  s:=result;                      //保存中间结果
  for I := 1 to Length(S) do          //依次对字符串中各字符进行操作
  begin                              //
    Result[I] := char(byte(S[I]) xor (Key shr 8));//将密钥移位后与字符异或
    Key := (byte(S[I]) + Key) * C1 + C2;      // 生成下一个密钥
  end;
end;

function Encrypt2( S: String; Key: Word): String;
var
  I: Integer;
  j: Integer;
begin
  Result := S;
  for I := 1 to Length(S) do
  begin
    Result[I] := char(byte(S[I]) xor (Key shr 8));//将密钥移位后与字符异或
    Key := (byte(Result[I]) + Key) * C1 + C2;  //产生下一个密钥
  end;
  s:=Result;
  Result:='';
  for i:=1 to length(s) do
  begin
    j:=Integer(s[i]);                  //提取字符
    Result:=Result + sa[j div 62]+sa[j mod 62]; //将字符转化为两个字母保存
  end;
end;

function Decrypt2( S: String; Key: Word): String;
var
  I: Integer;
  j: Integer;
begin
  result:='';
  for i:=1 to (length(s) div 2) do    //将字符串两个字母一组进行处理
  begin
    j:=(pos(s[2*i-1],sa)-1)*62;   //将两个字符重新转化为一个字符
    j:=j+pos(s[2*i],sa)-1;
    result:=result + char(j);       //追加字符,还原字符串
  end;
  s:=result;                      //保存中间结果
  for I := 1 to Length(S) do          //依次对字符串中各字符进行操作
  begin                              //
    Result[I] := char(byte(S[I]) xor (Key shr 8));//将密钥移位后与字符异或
    Key := (byte(S[I]) + Key) * C1 + C2;      // 生成下一个密钥
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -