日期:2014-05-18  浏览次数:20846 次

求解一个算法
环境:vs.2003 C#
需求:
/*使用二个64位的验证密钥,KeyA和KeyB。
a) 计算算法的数据源包括:
账号、失效期和代码,从左至右顺序编排。
例如19位账号、4位失效期和3位代码组成26个字符的数据源。
b) 将上述数据源扩展成128位二进制数据(不足128位右补二进制0)。
c) 将128位二进制数据分成两个64位的数据块。最左边的64位为Block1,最右边的64位为Block2。
d) 使用KeyA对Block1进行加密。
e) 将Block1的加密结果与Block2进行异或。使用KeyA对异或结果进行加密。
f) 使用KeyB对加密结果进行解密。
g) 使用KeyA对解密结果进行加密。
h) 从左至右将加密结果中的数字(0-9)抽出,组成一组数字。
i) 从左至右将加密结果中的字符(A-F)抽出,减10后将余数组成一组数字,排列在步骤(8)的数字之后。
j) 步骤(9)的左边第一组三位数即为结果值。*/

例:
账 号:4123 4567 8901 2345(例子省去几位) KeyA:0123 4567 89AB CDEF
失效期:8701 KeyB:FEDC BA98 7654 3210
代码:111

第一步:数据源为4123456789012345 8701 111
第二步:扩展为4123 4567 8901 2345 8701 1110 0000 0000
第三步:Block1=4123 4567 8901 2345
? Block2=8701 1110 0000 0000
第四步:用KeyA对Block1加密;
结果为:B76A DDCE 71CC C6BE
第五步:将结果与Block2异或,结果为:306B CCDE 71CC C6BE
? 再用KeyA加密, 结果为:BAE6 746F 6DE1 F0E6
第六步:用KeyB解密, 结果为:B262 ABCB 9DE9 9A63
第七步:用KeyA加密, 结果为:8D56 25FA 7801 1A0C
第八步:抽出结果中的数字, 结果为:8562 5780 110
第九步:抽出结果中的字符, 结果为:DFAA C
? 减10后, 结果为:3500 2
? 连接到第八步的结果之后为: 8562 5780 1103 5002 ?
第十步 最左边三位数就是算法需要得到的值856。
求算法思路及代码。


------解决方案--------------------
都有步骤了。。。。
------解决方案--------------------
第一次看到这么复杂的可逆加密算法。
------解决方案--------------------
跟昨天的不一样了
------解决方案--------------------
晕,都写的这么清楚了,还不知道怎么写啊
------解决方案--------------------
是用3DES加密么?
------解决方案--------------------
探讨
4楼的既然觉得很简单可以试着做做看嘛,我对4到7步还比较困惑,有C的程序,还在研究

------解决方案--------------------
探讨
应该是des加密解密的过程

------解决方案--------------------
估计得请个c++转c#的来看了,
我把代码拷贝到c++项目里编译一下错误一大堆,不知道怎么改。
你还是再发个帖子请个会c++的进来这边看把。
------解决方案--------------------
郁闷,不弄了等高人。
结果:B76A DDCE 71CC C6BE 16位

我加密出来的结果却是24位
------解决方案--------------------

------解决方案--------------------
up