大致要求是这样的:
1、可以加密和解密
2、要有密钥在里面
3、最好是修改了加密后字符串里的任意字符(除了尾部)都只能解密出乱码
4、如果是好的代码,重谢+追分
1、可以加密和解密
2、要有密钥在里面
3、最好是修改了加密后字符串里的任意字符(除了尾部)都只能解密出乱码
4、如果是好的代码,重谢+追分
解决方案 »
- Delphi 创建项目中那么多选项,那个是干什么用的!
- 救急,谁帮忙提供一个delphi7.0的注册码
- 我做了个DLL的窗体,里面放了DataSource1和SimpleDataSet,为什么在主程序关闭时出错?
- Corba 分布式程序设计
- ado在執行過程中,鼠標的形狀改變一下,執行完後又變過來,bde就是這樣的呀。
- 请问各位大虾:谁有开发 财务系统 的经历,可否指点在下
- 请问:Delphi_ADO连到Oracle是不是需要配置Oracle客户端的连接字符串
- 这样的功能可以实现吗?
- 寻找DBdatatimepicker控件
- Delphi怎么调用C++语言的dll
- delphi+dbexpress+mysql如何发布在别的机器上用
- 哪位大大用过win7的?请说一下感受
function EncrypStr(Src, Key: String): String;//字符串加密函数
//对字符串加密(Src:源 Key:密匙)
var KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then key:='delphi';
KeyPos:=0;
Range:=256;
Randomize;
offset:=Random(Range);
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(Key[KeyPos]);
dest:=dest + format('%1.2x',[SrcAsc]);
offset:=SrcAsc;
end;
Result:=Dest;
end;
end;function UncrypStr(Src, 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 key:='delphi';
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(Key[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;//********************************************************
// 加密解密 (利用异或运算) (方式2)
//********************************************************function encryptstr(const s:string; skey:string):string;//加密
var
i,j: integer;
hexS,hexskey,midS,tmpstr:string;
a,b,c:byte;
begin
hexS :=myStrtoHex(s);
hexskey:=myStrtoHex(skey);
midS :=hexS;
for i:=1 to (length(hexskey) div 2) do
begin
if i<>1 then midS:= tmpstr;
tmpstr:='';
for j:=1 to (length(midS) div 2) do
begin
a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
c:=a xor b;
tmpstr := tmpstr+myStrtoHex(chr(c));
end;
end;
result := tmpstr;
end;function decryptstr(const s:string; skey:string):string;//解密
var
i,j: integer;
hexS,hexskey,midS,tmpstr:string;
a,b,c:byte;
begin
hexS :=s;//应该是该字符串
if length(hexS) mod 2=1 then
begin
showmessage('密文错误!');
exit;
end;
hexskey:=myStrtoHex(skey);
tmpstr :=hexS;
midS :=hexS;
for i:=(length(hexskey) div 2) downto 1 do
begin
if i<>(length(hexskey) div 2) then midS:= tmpstr;
tmpstr:='';
for j:=1 to (length(midS) div 2) do
begin
a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
c:=a xor b;
tmpstr := tmpstr+myStrtoHex(chr(c));
end;
end;
result := myHextoStr(tmpstr);
end;
var
//idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
//TmpSrcAsc :Integer;
Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then
key:='csdn';
KeyPos:=0;
//SrcPos:=0;
//SrcAsc:=0;
Range:=256;
Randomize;
offset:=Random(Range);
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(Key[KeyPos]);
dest:=dest + format('%1.2x',[SrcAsc]);
offset:=SrcAsc;
end;
Result:=Dest;
end;function UncrypKey (Src:String; Key:String):string;
var
//idx :integer;
KeyLen :Integer;
KeyPos :Integer;
offset :Integer;
dest :string;
SrcPos :Integer;
SrcAsc :Integer;
TmpSrcAsc :Integer;
//Range :Integer;
begin
KeyLen:=Length(Key);
if KeyLen = 0 then
key:='csdn';
KeyPos:=0;
//SrcPos:=0;
//SrcAsc:=0;
//Range:=256;
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(Key[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;
这个行不?
修改加密后内容的一两个字符依然可以解密出大部分字符串
我这里有个易语言的源码,可以在修改一两个字符后解密出乱码
下载地址:http://yus.ys168.com
总的一句话来说,就是你说的问题不是很清楚。