用ORD取得ASCII字符的代码后再加一个数值最后转换回CHAR,是不是不能超过255,如果超过了会出现什么情况?文件体积会变大吗? 回复贴子: 回复人: myxfang(小方)(大富翁银行~业务员~) (2001-12-11 13:23:02) 得5分 可以取余数 n mod 255 回复人: crapex(编程浪子) (2001-12-11 13:23:13) 得5分 一种意见: 加一个数值以后,再保存的时候,用整型,而不用字符型,这样就和255无关了。 我自己用C做过的,就是这个原理,文件会扩大几倍。 回复人: crapex(编程浪子) (2001-12-11 13:25:35) 得0分 取模以后,如果要恢复(解密)就会有很大问题,因为可能不同的字符,对应同样的密码,有相同的加密字符。 回复人: ihihonline(小小) (2001-12-11 13:28:53) 得5分 也是刚刚学的,哈哈 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;
回复人: zswang(伴水)(伤心中) (2001-12-11 13:30:13) 得15分 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; 回复人: zswang(伴水)(伤心中) (2001-12-11 13:32:04) 得0分 嘻嘻嘻嘻嘻嘻嘻嘻嘻 嘻嘻嘻小小嘻嘻嘻嘻 嘻嘻嘻嘻嘻嘻嘻嘻嘻 回复人: kevin_gao(困了!累了!睡觉了!) (2001-12-11 13:37:48) 得0分 收藏收藏! 回复人: z_x_b(长弓落日金沙丘) (2001-12-11 13:39:45) 得15分 为什么不用XOR,运算简单、可逆,且安全,微软也用, 不存在超出255的问题! 回复人: szfszf(samllcat) (2001-12-11 13:41:04) 得5分 做一个环,超过255就从0开始,文件不会变大 回复人: zzllabc(龙) (2001-12-11 13:47:32) 得0分 z_x_b(狂龙)说的一点不错:我自己在做口令简单加密时就用的XOR 为什么不用XOR,运算简单、可逆,且安全,微软也用, 不存在超出255的问题!
回复人: hmf9(hmf9) (2001-12-11 13:56:02) 得0分 谢各位,XOR我也有用过,现在只是想讨论一下这个问题而已,而不是寻找有效的加密方法 另:用XOR的话,能不能稍微复杂一点,而不仅仅只是安位异或,这样岂不是别人很容易进行反向解密? 回复人: zswang(伴水)(伤心中) (2001-12-11 13:59:58) 得0分 mKey不一样! 你还可以再用不同的mKey加密多次(只要你喜欢) 密码当然都可以破 可以不是不需要时间的 他破一种的时间 我可以玩出一百种加密出来 看谁更麻烦 回复人: hmf9(hmf9) (2001-12-11 14:02:18) 得0分 说的是,我脑袋刚才一时还没转过来,谢谢了,给分 回复人: zswang(伴水)(伤心中) (2001-12-11 14:06:38) 得0分 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; 回复人: leeky(雅痞·千年虫) (2001-12-11 14:09:10) 得0分 这种方法很好,可惜没给你提供完整代码:) 逆运算也没给出实在对不起呵呵 就算算法给破了也不太有问题。 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; --------------------------------------------------------------------------------
CSDN首页 | 新闻聚焦 | 共享软件 | 俱乐部 | 开发文档 | 专家门诊 | 招聘求职 | Linux园地 | 程序员杂志
--------------------------------------------------------------------------------
我要回复 | 我感兴趣 | 打印贴子 | 推荐给朋友 | 关闭窗口
主 题:对文本进行简单的加密...
作 者:hmf9
所属论坛:Delphi
问题点数:50
回复次数:15
发表时间:2001-12-11 13:18:37
用ORD取得ASCII字符的代码后再加一个数值最后转换回CHAR,是不是不能超过255,如果超过了会出现什么情况?文件体积会变大吗?
回复贴子:
回复人: myxfang(小方)(大富翁银行~业务员~) (2001-12-11 13:23:02) 得5分
可以取余数 n mod 255
回复人: crapex(编程浪子) (2001-12-11 13:23:13) 得5分
一种意见:
加一个数值以后,再保存的时候,用整型,而不用字符型,这样就和255无关了。
我自己用C做过的,就是这个原理,文件会扩大几倍。
回复人: crapex(编程浪子) (2001-12-11 13:25:35) 得0分
取模以后,如果要恢复(解密)就会有很大问题,因为可能不同的字符,对应同样的密码,有相同的加密字符。
回复人: ihihonline(小小) (2001-12-11 13:28:53) 得5分
也是刚刚学的,哈哈
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;
回复人: zswang(伴水)(伤心中) (2001-12-11 13:30:13) 得15分
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;
回复人: zswang(伴水)(伤心中) (2001-12-11 13:32:04) 得0分
嘻嘻嘻嘻嘻嘻嘻嘻嘻
嘻嘻嘻小小嘻嘻嘻嘻
嘻嘻嘻嘻嘻嘻嘻嘻嘻
回复人: kevin_gao(困了!累了!睡觉了!) (2001-12-11 13:37:48) 得0分
收藏收藏!
回复人: z_x_b(长弓落日金沙丘) (2001-12-11 13:39:45) 得15分
为什么不用XOR,运算简单、可逆,且安全,微软也用,
不存在超出255的问题!
回复人: szfszf(samllcat) (2001-12-11 13:41:04) 得5分
做一个环,超过255就从0开始,文件不会变大
回复人: zzllabc(龙) (2001-12-11 13:47:32) 得0分
z_x_b(狂龙)说的一点不错:我自己在做口令简单加密时就用的XOR
为什么不用XOR,运算简单、可逆,且安全,微软也用,
不存在超出255的问题!
回复人: hmf9(hmf9) (2001-12-11 13:56:02) 得0分
谢各位,XOR我也有用过,现在只是想讨论一下这个问题而已,而不是寻找有效的加密方法
另:用XOR的话,能不能稍微复杂一点,而不仅仅只是安位异或,这样岂不是别人很容易进行反向解密?
回复人: zswang(伴水)(伤心中) (2001-12-11 13:59:58) 得0分
mKey不一样!
你还可以再用不同的mKey加密多次(只要你喜欢)
密码当然都可以破
可以不是不需要时间的
他破一种的时间
我可以玩出一百种加密出来
看谁更麻烦
回复人: hmf9(hmf9) (2001-12-11 14:02:18) 得0分
说的是,我脑袋刚才一时还没转过来,谢谢了,给分
回复人: zswang(伴水)(伤心中) (2001-12-11 14:06:38) 得0分
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;
回复人: leeky(雅痞·千年虫) (2001-12-11 14:09:10) 得0分
这种方法很好,可惜没给你提供完整代码:)
逆运算也没给出实在对不起呵呵
就算算法给破了也不太有问题。
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;
--------------------------------------------------------------------------------
我要回复:(请您对您的言行负责,遵守中华人民共和国有关法律、法规,尊重网上道德)
返回问题 | 关闭窗口
美达美简介 广告服务 英语步步高 程序员大本营 百联美达美科技有限公司 版权所有