可以取余数 n mod 255
解决方案 »
- 如何让标题栏变得透明呢?
- 请求些程序素材
- 关于Dbgrid的内容导入到excel中的,传入函数已经写好,不会调用,帮忙
- TDataBase 如何连接远程数据库?
- 求一个好用的收藏夹控件。
- DLL中使用FastReport,在线等待
- SQL Server联机手册会出现"对象不支持此属性或方法", 请问大家怎么办?
- delphi6.0安装问题!急!!!!!
- 请教怎样将*.db文件转换为*.dbf?
- 如何在Delphi中通过ODBC连ORACLE8.0.4
- 怎样用WATCH监视一个变量?为什么我填上变量名都不行?
- 请各位解释一下Tstream write,read/writebuffer,readbuffer的具体用法和意义,举例
const
cKey = '随便你了';function Encrypt(mStr: string; mKey: string): string;
var
I, J: Integer;
begin
J := 1;
Result := '';
for I := 1 to Length(mStr) do begin
Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else J := 1;
end;
{自己加步骤}
end;function Decrypt(mStr: string; mKey: string): string;
var
I, J: Integer;
begin
J := 1;
Result := '';
{自己加步骤}
for I := 1 to Length(mStr) do begin
Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else J := 1;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);
end;
var
I, J: Integer;
begin
Result := '';
J := 1;
for I := 1 to Length(mStr) do begin
Result := Result + Chr(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 < Length(mKey) then
Inc(J)
else J := 1;
end;
end;
不存在超出255的问题!
为什么不用XOR,运算简单、可逆,且安全,微软也用,
不存在超出255的问题!
另:用XOR的话,能不能稍微复杂一点,而不仅仅只是安位异或,这样岂不是别人很容易进行反向解密?
你还可以再用不同的mKey加密多次(只要你喜欢)
密码当然都可以破
可以不是不需要时间的
他破一种的时间
我可以玩出一百种加密出来
看谁更麻烦
var
I, J: Integer;
begin
J := 1;
Result := '';
for I := 1 to Length(mStr) do begin
Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else J := 1;
end;
{自己加步骤}
end;function Decrypt(mStr: string; mKey: string): string;
var
I, J: Integer;
begin
J := 1;
Result := '';
{自己加步骤}
for I := 1 to Length(mStr) do begin
Result := Result + Char(Ord(mStr[I]) xor Ord(mKey[J]));
if J + 1 <= Length(mKey) then
Inc(J)
else J := 1;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
const
cKey1 = '谁想试试怎么破';
cKey2 = '我可不愿意这样玩(1)我可不愿意这样玩(2)我可不愿意这样玩(3)';
cKey3 = 'Memo2.Text := Decrypt(Encrypt(Memo1.Text, cKey), cKey);';
var
S: string; //加密后的字符
begin
S := Encrypt(Encrypt(Encrypt(Memo1.Text, cKey1), cKey2), cKey3);
ShowMessage(S);
Memo2.Text := Decrypt(Decrypt(Decrypt(S, cKey3), cKey2), cKey1);
end;
逆运算也没给出实在对不起呵呵
就算算法给破了也不太有问题。
key1:=****;
para1:=****;
para2:=****;
以上三个参数你自己记住就是了。
resultStr:='';
key1:=****;
para1:=****;
para2:=****;
//解密密钥
for i:=1 to 9 do
begin
Ch:=OriginStr[size-9+i];
Result:=char(byte(Ch)xor(key1 shr 8));
key1:=(byte(Ch)+key1)*para1+para2; resultStr:=resultStr+Result;
end;