求加密算法(100分)

  • 主题发起人 主题发起人 龙之吻
  • 开始时间 开始时间

龙之吻

Unregistered / Unconfirmed
GUEST, unregistred user!
三个字符串A,B,C
A长度12,B长度18,C长度2
求一密文包含这三条信息,而且可以反算
密文长度不能超过20,密文只能由数字和字母组成
我做注册码用
 
明文信息量为22个Byte(256^22),而密文为20个数字或字母(36^20),显然密文不可
能完全容纳明文的全部信息,注定是不能被反算的——除非用规定明文字符串只能由数字构
成等方法来缩小明文的信息量。

请参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=2315731
 
上楼的看清楚了,明文是32个字节,而密文只有20个字节。
还要求可以还原的话根本不可能做到,就算全是字母、数字并且不分大小写,32位可以有36的32次方种情况,20位有36的20次方种情况。
36的32次方和36的20次方完全不是同一个级数的。

楼主不要再想这个问题了。
要么你放弃还原,要么增大密文长度。
 
如果明文里面冗余度高,可以考虑压缩。但这就存在了不确定因素。
 
好复杂啊,来学习
 
放弃还原有什么算法吗?
 
放弃是一种智慧,呵呵:)

注册过程:
MyHash(A+B+C) => H 获得散列值——长度已经被压缩(存在信息丢失)
MyEnc(H) => UserSN 对H加密(无损),将结果UserSN显示给用户
用户将UserSN发给你
MyDec(UserSN) => H 反算出H值
MyEnc2(H) => UserKey 对H进行另一种加密(无损),生成UserKey
将UserKey发送给用户
MyDec2(UserKey) => H2 根据注册码UserKey反算出H2
if MyHash(A+B+C)=H2 then 注册成功 else 失败


至于散列以及加密算法,可以采用强度极高的双向流式加密算法:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=7088
散列的过程就是将32字节的字符串加密成等长的密文字符串后,截取前面的几个字符(具
体个数自行确定,建议8位即可——冲突概率为1/(2^64),够用了)。
序列号的生成,可以简单的将密文字符串变成十六进制编码(长度将扩展一倍),就可以
显示给用户了。
 
多人接受答案了。
 
后退
顶部