龙人在线
about me

Arron

抛砖只为引玉(QQ长期隐身在线)
不能富贵难成大器皆因懒,
胸无大志庸庸碌碌只为闲。

这里是我平时收集的和写的一些东西,希望和大家一起共同进步!

无聊看看电影 边听音乐边看 有空多交流
Google_search
Google
hot
latest
photos
还你真实的开幕式!震撼美图[转]【连载】 央行今日发行600万张面额10元奥运纪念钞(组图) 巧遇日本妹妹海滩拍片片 诱不可挡超级丰胸大美人
links
龙人在线 >> 学习资料 >> Delphi专栏 >> Delphi实现的简单加解密

Delphi实现的简单加解密

来源:来自网络 作者:不详 日期:2010-05-11 热度:
  1. var:   
  2.   key: string;         //加解密关键字   
  3.   percent1: Double;    //加解密转换百分比,与关键字一同构成一个加密解密算法   
  4.   
  5.   
  6. //移位解密函数   
  7. function TfrmCryptograph.DeCode(aCryptograph, aKey: string): string;   
  8. var   
  9.   i,keylen,codelen:integer;   
  10. begin   
  11.   keylen :=Length(akey);   
  12.   codelen:=Length(aCryptograph);   
  13.   SetLength(Result, Length(aCryptograph));   
  14.   for i:=1 to codelen do   
  15.   begin   
  16.     Result[i]:=Chr(Ord(aCryptograph[i])-Ord(aKey[(i mod KeyLen)+1]));   
  17.   end;   
  18. end;   
  19.   
  20. //移位加密函数   
  21. function TfrmCryptograph.EnCode(aCryptograph, aKey: string): string;   
  22. var   
  23.   i,keylen,codelen:integer;   
  24. begin   
  25.   keylen:=Length(akey);   
  26.   codelen:=Length(aCryptograph);   
  27.   SetLength(Result, Length(aCryptograph));   
  28.   for i:=1 to codelen do   
  29.   begin   
  30.     Result[i]:=Chr(Ord(aCryptograph[i])+Ord(aKey[(i mod KeyLen)+1]));   
  31.   end;   
  32. end;   
  33.   
  34. //移位加解密过程   
  35. function TfrmCryptograph.GetKey(aKey: string; aPercent: Double): string;   
  36. var   
  37.   i:integer;   
  38. begin   
  39.   SetLength(Result,Length(aKey));   
  40.   for i:=1 to Length(aKey) do   
  41.   begin   
  42.     Result[i]:=Chr(Round(Ord(aKey[i])*aPercent));   
  43.   end;   
  44. end;   
  45.   
  46. //在代码中调用加解密过程   
  47.  for i := 0 to mmoInput.Lines.Count-1 do   
  48.   begin   
  49.     strTemp := mmoInput.Lines.Strings[i];   
  50.     str := EnCode(strTemp,GetKey(Key,Percent1));   
  51.     mmoOutput.Lines.Append(str);   
  52. //进度百分比的计算   
  53.     pbEnDecodeProcess.Position := pbEnDecodeProcess.Position + 1;   
  54.     per := Trunc(pbEnDecodeProcess.Position / pbEnDecodeProcess.Max * 100);   
  55.     pnlProcess.Caption := IntToStr(per) + '%';   
  56.     pnlProcess.Repaint;   
  57.   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的不同组合使得可以定义出自己的密钥,适用于对安全性要求不是很高的加密场合

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

 

Tags: Delphi 算法
广告位招租,广告代号:gg468
Class Navigation
search
站内
advertise
Copyright © www.jx19.Com All rights reserved.