procedure TForm1.Decryption(var adata: string);//解密 var i:longint; begin for i := 1 to length(adata) do begin adata[i]:=Char(Ord(adata[i]) shr 2); end; end;procedure TForm1.Encryption(var adata: string);//加密 var i:longint; begin for i := 1 to length(adata) do begin adata[i]:=Char(Ord(adata[i]) shl 2); end; end;这是我的加密、解密函数。 就是用中文加密后解出来和原来不一样这是为什么?
这你要判断asicc码值了,如果大于127,就要读两位长度了
//判断是否汉字: while j<= strlen(pchar(字串)) do begin if ord(字串[j])>128 then begin // 是汉字 inc(j,2); end else inc(j,1); end;
//加密部分的改造 ,所有字符都处理 procedure TForm1.Encryption(var adata: string);//加密 var i:longint; ch1:char; begin for i := 1 to length(adata) do begin ch1:=adata[i]; asm { mov ah,ch1 rol ah,2 //循环左移2位,不会丢失数据,如果是解密,则用ROR ah,2 替换 mov ch1,ah } adata[i]:=ch1; end; end;
var
i:longint;
begin
for i := 1 to length(adata) do begin
adata[i]:=Char(Ord(adata[i]) shr 2);
end;
end;procedure TForm1.Encryption(var adata: string);//加密
var
i:longint;
begin
for i := 1 to length(adata) do begin
adata[i]:=Char(Ord(adata[i]) shl 2);
end;
end;这是我的加密、解密函数。
就是用中文加密后解出来和原来不一样这是为什么?
//判断是否汉字:
while j<= strlen(pchar(字串)) do
begin
if ord(字串[j])>128 then
begin
// 是汉字
inc(j,2);
end
else
inc(j,1);
end;
procedure TForm1.Encryption(var adata: string);//加密
var
i:longint;
ch1:char;
begin
for i := 1 to length(adata) do begin
ch1:=adata[i];
asm
{
mov ah,ch1
rol ah,2 //循环左移2位,不会丢失数据,如果是解密,则用ROR ah,2 替换
mov ch1,ah
}
adata[i]:=ch1;
end;
end;