对文本进行简单的加密...

hmf9 2001-12-11 01:18:37
用ORD取得ASCII字符的代码后再加一个数值最后转换回CHAR,是不是不能超过255,如果超过了会出现什么情况?文件体积会变大吗?
...全文
185 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hmf9 2002-01-03
  • 打赏
  • 举报
回复
OK
leeky 2001-12-11
  • 打赏
  • 举报
回复
看到没,key1一直在变依赖于前面的密文
leeky 2001-12-11
  • 打赏
  • 举报
回复
这种方法很好,可惜没给你提供完整代码:)
逆运算也没给出实在对不起呵呵
就算算法给破了也不太有问题。
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;
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
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);
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;

hmf9 2001-12-11
  • 打赏
  • 举报
回复
说的是,我脑袋刚才一时还没转过来,谢谢了,给分
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
mKey不一样!
你还可以再用不同的mKey加密多次(只要你喜欢)
密码当然都可以破
可以不是不需要时间的
他破一种的时间
我可以玩出一百种加密出来
看谁更麻烦
hmf9 2001-12-11
  • 打赏
  • 举报
回复
谢各位,XOR我也有用过,现在只是想讨论一下这个问题而已,而不是寻找有效的加密方法
另:用XOR的话,能不能稍微复杂一点,而不仅仅只是安位异或,这样岂不是别人很容易进行反向解密?
抱朴守拙 2001-12-11
  • 打赏
  • 举报
回复
 z_x_b(狂龙)说的一点不错:我自己在做口令简单加密时就用的XOR
为什么不用XOR,运算简单、可逆,且安全,微软也用,
不存在超出255的问题!
szfszf 2001-12-11
  • 打赏
  • 举报
回复
做一个环,超过255就从0开始,文件不会变大
长弓落日 2001-12-11
  • 打赏
  • 举报
回复
为什么不用XOR,运算简单、可逆,且安全,微软也用,
不存在超出255的问题!
kevin_gao 2001-12-11
  • 打赏
  • 举报
回复
收藏收藏!
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻小小嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
function f(mStr: string; mKey: string): string;
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;
ihihonline 2001-12-11
  • 打赏
  • 举报
回复
也是刚刚学的,哈哈
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;
crapex 2001-12-11
  • 打赏
  • 举报
回复
取模以后,如果要恢复(解密)就会有很大问题,因为可能不同的字符,对应同样的密码,有相同的加密字符。
crapex 2001-12-11
  • 打赏
  • 举报
回复
一种意见:
加一个数值以后,再保存的时候,用整型,而不用字符型,这样就和255无关了。
我自己用C做过的,就是这个原理,文件会扩大几倍。
myxfang 2001-12-11
  • 打赏
  • 举报
回复
可以取余数 n mod 255

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧