求一加密算法 按byte串,偶数减去32,奇数减去31或者自建一个对照表 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 比较好的办法,通过Key加密。网上介绍不少。最好找两本书,系统地看看。 function TFrmRegister.EncryptString1(Source, Key: string): string;// 对字符串加密(Source:源 Key:密匙)var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; i: integer; SrcAsc: integer; Range: integer;begin KeyLen := Length(Key); if KeyLen = 0 then KeyPos := 0; Range := 256; randomize; Offset := random(Range); //Offset:=174; Dest := format('%1.2x',[Offset]); for i := 1 to Length(Source) do begin SrcAsc := (Ord(Source[i]) + Offset) mod 255; if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; SrcAsc := SrcAsc xor Ord(Key[KeyPos]); //Dest := Dest + format('%1.2x', [SrcAsc]); Dest := Dest + chr(SrcAsc); Offset := SrcAsc; end; result := Dest;end;function TFrmRegister.UnEncryptString1(Source, Key: string): string;// 对字符串解密(Src:源 Key:密匙)var KeyLen: integer; KeyPos: integer; Offset: integer; Dest: string; SrcPos: integer; SrcAsc: integer; TmpSrcAsc: integer;begin KeyLen := Length(Key); if KeyLen = 0 then KeyPos := 0; Offset := strtoint('$' + copy(Source, 1, 2)); SrcPos := 3; repeat SrcAsc:=Ord(Source[SrcPos]); if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]); if TmpSrcAsc <= Offset then TmpSrcAsc := 255 + TmpSrcAsc - Offset else TmpSrcAsc := TmpSrcAsc - Offset; Dest := Dest + chr(TmpSrcAsc); Offset := SrcAsc; SrcPos := SrcPos + 1; until SrcPos >= Length(Source); result := Dest;end;加密调用:EncryptString1(民用航空航天,'R&w^7h5#@61ahj#kd$tsw%');解密调用:UnEncryptString1后汉字有时候就会丢失,哪位高手帮忙看看,谢谢! 乱码的话,在xe 下注意string, ansistring 问题,多半由此引起.还有, 加密后还想解密的话, 并且小于原字符串长度的 , 基本不可能.加密后等长是可以的. Delphi7运行老是出错....新手求解 如何实时记录各种浏览器输入的网址? P2P穿关不成功 怎样用DBgrid做单据录入窗口? 多个窗体想共用一个ADO连接 报表问题 关于xpmenu的问题! 我想学习看DELPHI的帮助文档 建模工具,哪个好? 一个查询日期和类型转换的问题 求帮助 打开显示应用程序初始化失败 找不到文件project1.dpr DBGridEh 怎样可以显示成下面的数据
最好找两本书,系统地看看。
// 对字符串加密(Source:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
i: integer;
SrcAsc: integer;
Range: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
KeyPos := 0;
Range := 256;
randomize;
Offset := random(Range);
//Offset:=174;
Dest := format('%1.2x',[Offset]);
for i := 1 to Length(Source) do
begin
SrcAsc := (Ord(Source[i]) + Offset) mod 255;
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1;
SrcAsc := SrcAsc xor Ord(Key[KeyPos]);
//Dest := Dest + format('%1.2x', [SrcAsc]);
Dest := Dest + chr(SrcAsc);
Offset := SrcAsc;
end;
result := Dest;
end;function TFrmRegister.UnEncryptString1(Source, Key: string): string;
// 对字符串解密(Src:源 Key:密匙)
var
KeyLen: integer;
KeyPos: integer;
Offset: integer;
Dest: string;
SrcPos: integer;
SrcAsc: integer;
TmpSrcAsc: integer;
begin
KeyLen := Length(Key);
if KeyLen = 0 then
KeyPos := 0;
Offset := strtoint('$' + copy(Source, 1, 2));
SrcPos := 3;
repeat
SrcAsc:=Ord(Source[SrcPos]);
if KeyPos < KeyLen then
KeyPos := KeyPos + 1
else
KeyPos := 1; TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
if TmpSrcAsc <= Offset then
TmpSrcAsc := 255 + TmpSrcAsc - Offset
else
TmpSrcAsc := TmpSrcAsc - Offset;
Dest := Dest + chr(TmpSrcAsc);
Offset := SrcAsc;
SrcPos := SrcPos + 1;
until
SrcPos >= Length(Source);
result := Dest;
end;加密调用:EncryptString1(民用航空航天,'R&w^7h5#@61ahj#kd$tsw%');
解密调用:UnEncryptString1后汉字有时候就会丢失,哪位高手帮忙看看,谢谢!
在xe 下注意string, ansistring 问题,多半由此引起.还有, 加密后还想解密的话, 并且小于原字符串长度的 , 基本不可能.
加密后等长是可以的.