求加密解密字符串算法 ( 积分: 30 )

  • 主题发起人 主题发起人 startjoy
  • 开始时间 开始时间
S

startjoy

Unregistered / Unconfirmed
GUEST, unregistred user!
求加密解密字符串算法,要求:
1、加密后的字符要能通过解密过程还原。
2、加密字符串由字母、数字、特殊符号和中文构成,加密后的密文必须为英文字母和数字的组合(不能包括乱码)。
 
求加密解密字符串算法,要求:
1、加密后的字符要能通过解密过程还原。
2、加密字符串由字母、数字、特殊符号和中文构成,加密后的密文必须为英文字母和数字的组合(不能包括乱码)。
 
加密:
vstr:array[0..11] of char;

strpcopy(vstr,'*'+trim(ansilowercase(vpassword_bf))+'*');
vstring:='';
for i:=0 to 10 do
if trim(vstr)<>'' then
vstring:=vstring+chr( (word(vstr) +3) shl 1);

FrmOperatorMag.Adoquery1.fieldvalues['login_pass']:=vstring;



解密:
strpcopy(vstr,'*'+trim(vpassword_af)+'*');
vstring:='';
for i:=0 to 11 do
if trim(vstr)<>'' then
vstring:=vstring+chr( (word(vstr) shr 1)-3);
 
楼上的,你给的过程不行啊,没满足第二条要求,
用你的过程加密 '大富翁' 后得到的结果是 'Zn靨|?Z',
我需要的是加密后的密文必须为英文字母和数字的组合(不能包括乱码)。
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=7088
KeyLife富翁笔记
作者?: creation-zy
标题?: 双向流式加密算法
看看这个有没有用吧
 
to app2001
加密算法确实不错,可是密文出来的还是乱码。
Delphi有没有把字符串转为十六进的函数,如果有那就再把密文转换了十六进制就满足我的要求了,当然同时还得要求把十六进数还原为字符串,需要能提供这样的函数。
 
const
SeedString = 'qoslasgnvkhqweqweqwsadqweq'
//[red]种子字符串可以自己设定[/red]

function Encrypt3(S: String): String;
var
i,j:Integer;
Asc:Byte;
begin
Result:='';
for i:=1 to Length(S) do
begin
if (i mod Length(SeedString)) = 0 then
j:=Length(SeedString)
else
j:=(i mod Length(SeedString));
Asc:=Byte(S) xor Byte(SeedString[j]);
Result:=Result+IntToHex(Asc,3);
end;
end;

function Decrypt3(S: String): String;
var
i,j:Integer;
ss:String;
Asc:Byte;
begin
Result:='';
for i:=1 to (Length(S) div 3) do
begin
if (i mod Length(SeedString)) = 0 then
j:=Length(SeedString)
else
j:=(i mod Length(SeedString));
ss:=Copy(S,(i-1)*3+1,3);
Asc:=StrToInt('$'+ss);
Asc:=Asc xor Byte(SeedString[j]);
Result:=Result+Chr(Asc);
end;
end;
 
上面得出是全16进制数字的(0-9, A-F)。不过还好用。
 
综合楼上两位的代码,感觉还不错,多谢!
 
多人接受答案了。
 
后退
顶部