要求对任意长度的字符串进行加密解密,加密之后的字符串可以用解密还原回来
原来我照书上(delphi 6 开发实务)写的一个程序,对加密后的有些字符串无法正确还原,比如说 '110' 加密之后再解密为'11'.
谢谢大侠的指点email: [email protected]
QQ 65113007
原来我照书上(delphi 6 开发实务)写的一个程序,对加密后的有些字符串无法正确还原,比如说 '110' 加密之后再解密为'11'.
谢谢大侠的指点email: [email protected]
QQ 65113007
解决方案 »
- 大概讲讲该段程序
- 求解Version Language、Font CharSet和Font Name的关系
- 语法问题
- 讨厌的ehlib grid 总是有默认的弹出菜单!!!!怎么办!!去掉他
- 比较难的问题:如何去掉ActiveForm所在的 IE 的状态栏?
- WordDocument 如何打开从数据库中的流文件(TFileStream)
- 简单问题,请帮手,在线等……
- 调用ADO存储过程(SQL SERVER2000)第一次没问题,第二次就出错,晕!!!
- 各位大侠快点来帮帮我!win98 socket 与win2000 socket的区别
- 急急急!!!我想做一个对指定的网页填写数据的程序,请问如何编写?如何实现?用什么原理?(高分相赠!!)
- 竭诚为你服务:绝对无偿提供FTP空间,内详!
- dephi6+sybase11,存储过程不能传空值?
var
I:Integer;
begin
Result:='';
for i:=1 to length(s) do
result := result+chr(ord(s[i]) xor i xor 69);
result := result + char(69);
end;
function tForm1.Decrypt1(const s:string):string; //key=1时为加密,0为解密
var
I:Integer;
begin
Result:='';
for i:=1 to length(s) - 1 do
result := result+chr(ord(s[i]) xor i xor 69);
end;
function JiaMi(jmString: string): string;
var
strLen,i,j: integer;
chr: Char;
begin
strlen:=Length(jmString);
j:=0;
for i:=1 to (strlen div 2) do
begin
chr:=jmString[i];
jmString[i]:=jmString[strlen-j];
jmString[strlen-j]:=chr;
Inc(j);
end;
if strlen>1 then
begin
chr:=jmString[1];
jmString[1]:=jmString[2];
jmString[2]:=chr;
end;
result:=jmString;
end;解密:
function JieMi(jmString: string): string;
var
strLen,i,j: integer;
chr: Char;
begin
strlen:=Length(jmString);
if strlen>1 then
begin
chr:=jmString[1];
jmString[1]:=jmString[2];
jmString[2]:=chr;
end;
j:=0;
for i:=1 to (strlen div 2) do
begin
chr:=jmString[i];
jmString[i]:=jmString[strlen-j];
jmString[strlen-j]:=chr;
Inc(j);
end;
result:=jmString;
end;
function Encrypt(Src:String):String;
var KeyLen,KeyPos,Offset,SrcPos,SrcAsc:Integer;
Dest :ShortString;
begin
if Src<>'' then
begin
KeyLen:=Length(PrivKey);
KeyPos:=0;
Randomize;
Offset:=Random(256);
Dest:=Format('%1.2x',[Offset]);
for SrcPos := 1 to Length(Src) do
begin
SrcAsc:=(Ord(Src[SrcPos]) + Offset) MOD 255;
if KeyPos < KeyLen then KeyPos:= KeyPos + 1
else KeyPos:=1;
SrcAsc:= SrcAsc xor Ord(PrivKey[KeyPos]);
Dest:=Dest + Format('%1.2x',[SrcAsc]);
Offset:=SrcAsc;
end;
Result:=Dest;
end
else Result:='';
end;//解密函数
function Decrypt(Src:String):String;
var KeyLen,KeyPos,Offset,SrcPos,SrcAsc,TmpSrcAsc:Integer;
Dest:String;
begin
if Src<>'' then
begin
KeyLen:=Length(PrivKey);
KeyPos:=0;
Offset:=StrToInt('$'+ Copy(Src,1,2));
SrcPos:=3;
repeat
SrcAsc:=StrToInt('$'+ Copy(Src,SrcPos,2));
if KeyPos < KeyLen Then KeyPos := KeyPos + 1
else KeyPos := 1;
TmpSrcAsc := SrcAsc xor Ord(PrivKey[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(Src);
Result:=Dest;
end
else Result:='';
end;