反算法??(50分)

  • 主题发起人 主题发起人 呆非4
  • 开始时间 开始时间

呆非4

Unregistered / Unconfirmed
GUEST, unregistred user!
有一算法如下:
输入8 个字节(可打印字符如空格,0~9,A~Z),如ABCDEFG。
也可以少于8个字节如EFG,此时ABCD即为16进制的00。
计算:H1H2H3 = A*0x4000+ B*0x1000+ C*0x400 +D*0x100 +E*0x40 +F*0x10+G
然后将H2放入低字节,H1+H2放入高字节。形成了两个字节。
现在我想做逆运算:即知道了两个字节的值。如何求出8个(或少于8)个字节的值。
因为上述算法会出两种不同的8个字节算出的两字节可能是一样的,
因此做逆运算时,我只要能求出一个值即可。
 
不可能直接反算,你可以用循环的办法,正算,判断相等就可以了。
而且你也只给了7个字节的算法啊,算出的H3你好像也没用。
 

前文有误:
具体如下:
有一算法如下:
输入8 个字节(可打印字符如空格,0~9,A~Z),如ABCDEFGH。
也可以少于8个字节如EFG,此时ABCD即为16进制的00。
计算:H1H2H3 = A*0x4000+ B*0x1000+ C*0x400 +D*0x100 +E*0x40 +F*0x10+G*0x4+H
然后将H2放入低字节,H1+H3放入高字节。形成了两个字节。
现在我想做逆运算:即知道了两个字节的值。如何求出8个(或少于8)个字节的值。
因为上述算法会出两种不同的8个字节算出的两字节可能是一样的,
因此做逆运算时,我只要能求出一个值即可。
注:0x100等值表示16进制100,10进制值为256。
我是只知道两个字节的内容,而不知8个字节的值,这正是我想要求出的。
 
关键在双字节表示里你原来的字符信息现在只有两个Bit,也就是说只有四种可能啊。
换句话说,结果也就是这样:12341234或者ABCDABCD,你觉得有用吗?
 
LIE:通过算法,就不只是四种可能了。
这种算法当然有意义,它可以1。加密,2。占用字节少。
 
你的编码过程是一个八元非齐次线性方程,
仅靠一组H1H2H3绝无可能求解(有无数不定
解),就好象有这么一个方程:
20=3a+1b+3c, 求a,b,c
即使再加上约束条件都为正整数且值限于ASCII码内,
我想求解的结果也远不止一个。
还是换编码算法吧
 
算法本身不会增加信息量,只会减少。2bit=四种可能:00 01 10 11,还用再细说吗?
 
iie说得没错,如果有36种可能(0~9,A~Z),至少要 Log2-36 (取整
为5)个bit来表示,从信息论的角度来说你期望用平均每字符2个bit
来表示包含36种可能的信源是超出了数据压缩的理论极限的,因为
此信源的熵是 36*1/36*Log2-36 bit/字符。
总之这种算法绝不可能实现
 
我想反问大家,CMOS中的密码是如何存储的?不也是2 个字节吗。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部