var:
key: string; //加解密关键字
percent1: Double; //加解密转换百分比,与关键字一同构成一个加密解密算法
//移位解密函数
function TfrmCryptograph.DeCode(aCryptograph, aKey: string): string;
var
i,keylen,codelen:integer;
begin
keylen :=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])-Ord(aKey[(i mod KeyLen)+1]));
end;
end;
//移位加密函数
function TfrmCryptograph.EnCode(aCryptograph, aKey: string): string;
var
i,keylen,codelen:integer;
begin
keylen:=Length(akey);
codelen:=Length(aCryptograph);
SetLength(Result, Length(aCryptograph));
for i:=1 to codelen do
begin
Result[i]:=Chr(Ord(aCryptograph[i])+Ord(aKey[(i mod KeyLen)+1]));
end;
end;
//移位加解密过程
function TfrmCryptograph.GetKey(aKey: string; aPercent: Double): string;
var
i:integer;
begin
SetLength(Result,Length(aKey));
for i:=1 to Length(aKey) do
begin
Result[i]:=Chr(Round(Ord(aKey[i])*aPercent));
end;
end;
//在代码中调用加解密过程
for i := 0 to mmoInput.Lines.Count-1 do
begin
strTemp := mmoInput.Lines.Strings[i];
str := EnCode(strTemp,GetKey(Key,Percent1));
mmoOutput.Lines.Append(str);
//进度百分比的计算
pbEnDecodeProcess.Position := pbEnDecodeProcess.Position + 1;
per := Trunc(pbEnDecodeProcess.Position / pbEnDecodeProcess.Max * 100);
pnlProcess.Caption := IntToStr(per) + '%';
pnlProcess.Repaint;
end;
Ord()其实更容易被理解成是一个类型转换符而非函数,其可以取得字符的ASCII码的值
原理就是通过Ord()将一个字符转为用ord其对应的ASCII码的值。
Chr()是Ord()的逆运算,负责将一个ASCII码值转换为对应的char.
Chr(Ord(aCryptograph[i])+Ord(aKey[(i mod KeyLen)+1]));
循环取key字符串中各个字符值,转换为ASCII码,乘以一个percent得到新的ASCII值,再循环取要加密的明文中一个字符转换为ASCII码,二者相加得到新的ASCII值,转换为字符就是加密后的密文;
解密的过程就是
密文ASCII- (加上的key对应ASCII值) * percent , 再转换为char,就可以解释出明文。
这种加解密原理比较简单,但是可以定义多个key和percent多层加密。同时,由于key和percent的不同组合使得可以定义出自己的密钥,适用于对安全性要求不是很高的加密场合
这种加解密原理较为简单,但是可以有不同的