求一个加密算法,能够实现汉字,数字,字母,标点的加密和解密的(还有加密完的是可见字符的,加密完的长度不能太长于原始的字符串)哪个朋友有给提供点,谢谢了(100分

  • 主题发起人 主题发起人 980
  • 开始时间 开始时间
我看看 谢谢 jiang_yun_2005
to VictorWoo
我想要有点强度的 不要太简单的,我自己也尝试写过 ,不是很好,所以到这里 征集 大家的方案
 
您可以试试 查表+移位
 
to jiang_yun_2005
能顺便给我发一份吗?
zqw0117[at]sina.com
 
to
jiang_yun_2005
假设 key =key
求一个加密算法,能够实现汉字,数字,字母,标点的加密和解密的(
点encry
成 #200#252#237#228#213#7#248#214#209#6#218#6#249#204#200#238#2#244#4#193#213#222#225#221#254#182#5#247#210#189#211

decrypt
雹匚阀鼗幽处咆烤尼咆烤偈侄烤况ы┲蚕岩?楚岩┲?

为什么

对你这个用法 不是很明白

我怎么测试 都没有整明白

就是字母还可以
 
最简单的,做个字符影射表,比如A-Q等
 
字符影射表 太容易破了

Function EncryptionEngine(Src:String; Key:String; Encrypt : Boolean):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:='Tom Lee';
KeyPos:=0;
SrcPos:=0;
SrcAsc:=0;
Range:=256;
if Encrypt then
begin
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;
end
else
begin
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);
end;
Result:=Dest;
end;



对了有的算法不能 用 edit1 - > F45DF3545DD 这样来比较2倍多

或许他加密长字符串就不是这个比例了
 
to antong
你的我测试 也不错 就是加完密信息太长了啊
例如
倒!这是DELPHI的BUG吗?ONPAINT事件竟然与屏幕锁定有关!
==
07D7F4E1E8DBC7F9A491BD6FC664C807A087A5872F599732F82C19230730FDA303C6AE08B8EAC3EEB11DA707A70A687A5A457354468C57
这样的长度我是不能忍受的,
谢谢你的参与
 
980
你有没有发现每个#后面的数字都不超过255,也就是说你还能把程序再修改一下,把后面的数字全部转成字符
你说的情况我这里没出现过呀,
你可以自己用key随便加密一段中文、英文或者什么的字符串,然后发给我,我来解密,
如果不对,我立刻永远不上DFW
 
to jiang_yun_2005

不要这样吗 这是干什么呢,今天在下班之前 不管怎样都揭贴的,的谢谢各位的捧场啊
 
to jiang_yun_2005
你发给我的是个exe ,如果需要你的代码 ,代价是什么???
还有为什么你加完的 都是#后面是数字呢
 
#后面的的数字实际上是一个字符的ASCII码的值
代价是1000分
 
呵呵 哥们 1000分 没有 但是我的所有分都可以给你,你也可以看我的分 总共材489 分


你说吧 只要好用 这些分都给你 但是不包括 这里的这100分,因为这些朋友都捧场了


你看看怎么样
 
或者看这个帖子
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3479510
帮我找到合适的人,一分都不要
 
to jiang_yun_2005


不好意思 ,我的同学里没有使用java的,我认识的圈子里 还真没有搞这个的
 
to 980
我发到你的邮箱了
 
谢谢 jiang_yun_2005
 
>>#后面的的数字实际上是一个字符的ASCII码的值

兄弟,楼主的要求是加密后字符可见,你的#后面的值改成ASCII码后,大部分不可见了:)不符合楼主的要求哦!!!!!如果用#+数字表示一个byte,那比用base64加密后的密文更大!!!!因为#站一个byte,后面的数字最高是3位数,站3个byte,加起来站4个byte(当然,也有小的,不过求一下平均值,这个长度还是接近2倍左右)。
 
to zqw0117,
谁说不可见,只是见到的可能是乱码

纠正,偶是MM
 
to jiang_yun_2005
你是 mm 真的吗
 
今天下班之前 不管怎么都结了 ,因为明天就休息了
 

Similar threads

D
回复
0
查看
909
DelphiTeacher的专栏
D
D
回复
0
查看
704
DelphiTeacher的专栏
D
D
回复
0
查看
666
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部