Delphi实现的简单加解密

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的不同组合使得可以定义出自己的密钥,适用于对安全性要求不是很高的加密场合

这种加解密原理较为简单,但是可以有不同的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值