一个很简单的加密字符问题... ( 积分: 50 )

  • 主题发起人 主题发起人 l0v3_y1n9
  • 开始时间 开始时间
L

l0v3_y1n9

Unregistered / Unconfirmed
GUEST, unregistred user!
function StrEncrypt(s: string): string;
var
i: integer;
c: char;
begin
result := '';
for i := 1 to length(s) do
begin
c := s;
inc(c, $80);
result := result + c;
end;
end;

StrEncrypt(#$E5)得到字母"e",那么如何写逆向函数求得"e"就等于#$E5呢?
 
你确定c的对应码加上$80不大于255?
给你推荐一个方法
function StrEncrypt(s: string): string;
var
i: integer;
c: Byte;
begin
result := '';
for i := 1 to length(s) do
begin
c := Byte(s);
c := (c xor $80);
result := result + Char(c);
end;
end;

加密解迷都调用它
 
你们的函数在加密大字符串时速度太慢:
result := result + Char(c);
这句太慢
 
StrEncrypt('JPG')得到加密后的字符"市",解密只得到"JP"
StrEncrypt('ASP')得到加密后的字符"劣",解密只得到"AS"
后面少了一个字符,偶然出现这种个别情况...
[:D] 不过还是多谢大哥...
 
StrEncrypt('JPG')得到加密后的字符"市",解密只得到"JP"
StrEncrypt('ASP')得到加密后的字符"劣",解密只得到"AS"
后面少了一个字符,偶然出现这种个别情况...
是你错了,StrEncrypt('JPG')得到加密后的字符不是 "市",后面还有个不可见的字符,加密后应该是三个字符"市"只是两个字符,你自己丢了一个字符
 
我是用iamy大哥的那个StrEncrypt测试的...-_-o
 
题外话:
如有实际应用,加解密应该用更复杂的算法。
如需要逆向运算,可以用des, or 3des
 
别人写的,对称加密解密,key为密钥,自己设一个吧
procedure Tform1.EnCode(var str:string
key:string);
var
i,j,len:integer;
begin
len:=length(key);
j:=length(str);
for i:=1 to j do
begin
if not (str=key[(i-1) mod len+1]) then
begin
j:=ord(str) xor ord(key[(i-1) mod len+1]);
str:=chr(j);
end
end;
end;
 
to:蒸发密令
感谢你的建议,不过我只是简单加密一些明文字符,防止别人反汇编看到重要的字符串...[:D]
 
字符串简单加解密:
const
a: array[0..9] of char = ('3','5','2','8','1','4','9','0','7','6');
b: array[0..9] of char = ('7','4','2','0','5','1','9','8','3','6');

function Encrypt(str: string): string;
var
s: string;
i: integer;
begin
s:='';
for I := 1 to length(str) do
s:=s+a[strtoint(str)];
result:=s;
end;

function Decrypt(str: string): string;
var
s: string;
i: integer;
begin
s:='';
for I := 1 to length(str) do
s:=s+b[strtoint(str)];
result:=s;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text:=Encrypt(Edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Edit3.Text:=decrypt(Edit2.Text);
end;
 
这样改一下速度会快些
procedure StrEncrypt(s: string);
var
i: integer;
begin
for i := 1 to length(s) do
begin
Byte(s) := (Byte(s) xor $80);
end;
end;
 

Similar threads

I
回复
0
查看
577
import
I
I
回复
0
查看
647
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部