五千年(敝帚自珍)

主题:【原创】说些关于中国密码的事吧 -- ragtime

共:💬28 🌺29
分页树展主题 · 全看首页 上页
/ 2
下页 末页
              • 家园 明白你意思了

                其实这两个都是这些函数的定义。你看他们赋值号右边是一样的,区别只在与把值赋给谁。(1)把变换字和移位都完成了,(2)只是算出变换字,没有做移位。你在进入下一循环的转换钱要自己做移位,a->b, b->c, c->d, d->a,再调用FF/GG/HH/II函数。

                MD5的转换每一次只改变一个32位字,也就是如你对(2)所说b,c,d不变。所以在下一步转换前要做移位,这样就相当于每4步,原来的128位数据就全变了。

                • 家园 周末好好想想。。。

                  我觉得(1)和(2)还是有区别的,因为每一步都要与512位的message 的其中32位相加。不过两个都不麻烦,改改就行,只要结果是简单相连,看看ABCD的值就行了。但都输不出正确结果,应该是我程序的问题。

                  A: 01 23 45 67

                  B: 89 ab cd ef

                  C: fe dc ba 98

                  D: 76 54 32 10

                  代码实现时就变成:

                  A = 0x67452301;

                  B = 0xefcdab89;

                  C = 0x98badcfe;

                  D = 0x10325476;

                  何解?

                  又发现一点:

                  .NET(win32)下的long的最大数是0x7fffffff, 算法给出的大部分常数都大于它,是不是因此会产生错误? 而unix下的long是64位,会好些?(记不清了,我周末用unix比较麻烦)

                  还有,是用C++写的,用了bitset<N>这个东东,写”+“重载时, 返回值用了reference, 又是这个Debug编译,返回值referece(&)和不加referece(&)竟然不一样!? 而用release编译两者相同。 用relese编译完后,有一句:“代码生成结束。”而Debug编译完就没有这句话。 我想,是不是relese是最终的编译?

                  换成long也不是正确结果。周末好好想想。。。

                  (老兄要忙,就不要理我了,让我一个人意淫吧)

                  • 家园 这样空对空说很难解决问题

                    (1)的算法我以前用过,肯定没错。(2)也没错。不是这个的问题。写这种程序细节非常重要。进位,移位,变量类型,操作次序等等。

                    要不你把程序贴出来?

                    • 家园 MD5

                      ragtime兄,本想这个周末把我理解的算法贴上来,不行啊,要糊口,而且程序要改的地方很多,暂时没时间,只好将这个小东东放一放。

                      已经献上2个通宝,望查收。

                      • MD5
                        家园 不必说这种话嘛

                        粗看了一下,第一个问题:你的F,G,H,I怎么都一样啊?这个不对啊。

                        比如F应该是((B) & (C)) | ((~B) & (D))。你的四个其实都是G的定义。

                        • 家园 收宝!

                          恭喜:意外获得【西西河通宝】一枚

                          谢谢:作者意外获得【西西河通宝】一枚

                          鲜花已经成功送出

                          返回

                          哈阿哈哈哈哈, 老铁不给俺转老兄通宝, 俺自己有招!

                          今天真爽,MD5完成,送你通宝的愿也还了,明天轻松糊口去!

                        • 家园 FF,GG,HH,II 供调试用

                          // Round 1

                          FF (a, b, c, d, M[ 0].to_ulong(), 7, 0Xd76aa478);

                          FF (d, a, b, c, M[ 1].to_ulong(), 12, 0Xe8c7b756);

                          FF (c, d, a, b, M[ 2].to_ulong(), 17, 0X242070db);

                          FF (b, c, d, a, M[ 3].to_ulong(), 22, 0Xc1bdceee);

                          FF (a, b, c, d, M[ 4].to_ulong(), 7, 0Xf57c0faf);

                          FF (d, a, b, c, M[ 5].to_ulong(), 12, 0X4787c62a);

                          FF (c, d, a, b, M[ 6].to_ulong(), 17, 0Xa8304613);

                          FF (b, c, d, a, M[ 7].to_ulong(), 22, 0Xfd469501);

                          FF (a, b, c, d, M[ 8].to_ulong(), 7, 0X698098d8);

                          FF (d, a, b, c, M[ 9].to_ulong(), 12, 0X8b44f7af);

                          FF (c, d, a, b, M[10].to_ulong(), 17, 0Xffff5bb1);

                          FF (b, c, d, a, M[11].to_ulong(), 22, 0X895cd7be);

                          FF (a, b, c, d, M[12].to_ulong(), 7, 0X6b901122);

                          FF (d, a, b, c, M[13].to_ulong(), 12, 0Xfd987193);

                          FF (c, d, a, b, M[14].to_ulong(), 17, 0Xa679438e);

                          FF (b, c, d, a, M[15].to_ulong(), 22, 0X49b40821);

                          // Round 2

                          GG (a, b, c, d, M[ 1].to_ulong(), 5, 0Xf61e2562);

                          GG (d, a, b, c, M[ 6].to_ulong(), 9, 0Xc040b340);

                          GG (c, d, a, b, M[11].to_ulong(), 14, 0X265e5a51);

                          GG (b, c, d, a, M[ 0].to_ulong(), 20, 0Xe9b6c7aa);

                          GG (a, b, c, d, M[ 5].to_ulong(), 5, 0Xd62f105d);

                          GG (d, a, b, c, M[10].to_ulong(), 9, 0X2441453);

                          GG (c, d, a, b, M[15].to_ulong(), 14, 0Xd8a1e681);

                          GG (b, c, d, a, M[ 4].to_ulong(), 20, 0Xe7d3fbc8);

                          GG (a, b, c, d, M[ 9].to_ulong(), 5, 0X21e1cde6);

                          GG (d, a, b, c, M[14].to_ulong(), 9, 0Xc33707d6);

                          GG (c, d, a, b, M[ 3].to_ulong(), 14, 0Xf4d50d87);

                          GG (b, c, d, a, M[ 8].to_ulong(), 20, 0X455a14ed);

                          GG (a, b, c, d, M[13].to_ulong(), 5, 0Xa9e3e905);

                          GG (d, a, b, c, M[ 2].to_ulong(), 9, 0Xfcefa3f8);

                          GG (c, d, a, b, M[ 7].to_ulong(), 14, 0X676f02d9);

                          GG (b, c, d, a, M[12].to_ulong(), 20, 0X8d2a4c8a);

                          // Round 3

                          HH (a, b, c, d, M[ 5].to_ulong(), 4, 0Xfffa3942);

                          HH (d, a, b, c, M[ 8].to_ulong(), 11, 0X8771f681);

                          HH (c, d, a, b, M[11].to_ulong(), 16, 0X6d9d6122);

                          HH (b, c, d, a, M[14].to_ulong(), 23, 0Xfde5380c);

                          HH (a, b, c, d, M[ 1].to_ulong(), 4, 0Xa4beea44);

                          HH (d, a, b, c, M[ 4].to_ulong(), 11, 0X4bdecfa9);

                          HH (c, d, a, b, M[ 7].to_ulong(), 16, 0Xf6bb4b60);

                          HH (b, c, d, a, M[10].to_ulong(), 23, 0Xbebfbc70);

                          HH (a, b, c, d, M[13].to_ulong(), 4, 0X289b7ec6);

                          HH (d, a, b, c, M[ 0].to_ulong(), 11, 0Xeaa127fa);

                          HH (c, d, a, b, M[ 3].to_ulong(), 16, 0Xd4ef3085);

                          HH (b, c, d, a, M[ 6].to_ulong(), 23, 0X4881d05);

                          HH (a, b, c, d, M[ 9].to_ulong(), 4, 0Xd9d4d039);

                          HH (d, a, b, c, M[12].to_ulong(), 11, 0Xe6db99e5);

                          HH (c, d, a, b, M[15].to_ulong(), 16, 0X1fa27cf8);

                          HH (b, c, d, a, M[ 2].to_ulong(), 23, 0Xc4ac5665);

                          // Round 4

                          II (a, b, c, d, M[ 0].to_ulong(), 6, 0Xf4292244);

                          II (d, a, b, c, M[ 7].to_ulong(), 10, 0X432aff97);

                          II (c, d, a, b, M[14].to_ulong(), 15, 0Xab9423a7);

                          II (b, c, d, a, M[ 5].to_ulong(), 21, 0Xfc93a039);

                          II (a, b, c, d, M[12].to_ulong(), 6, 0X655b59c3);

                          II (d, a, b, c, M[ 3].to_ulong(), 10, 0X8f0ccc92);

                          II (c, d, a, b, M[10].to_ulong(), 15, 0Xffeff47d);

                          II (b, c, d, a, M[ 1].to_ulong(), 21, 0X85845dd1);

                          II (a, b, c, d, M[ 8].to_ulong(), 6, 0X6fa87e4f);

                          II (d, a, b, c, M[15].to_ulong(), 10, 0Xfe2ce6e0);

                          II (c, d, a, b, M[ 6].to_ulong(), 15, 0Xa3014314);

                          II (b, c, d, a, M[13].to_ulong(), 21, 0X4e0811a1);

                          II (a, b, c, d, M[ 4].to_ulong(), 6, 0Xf7537e82);

                          II (d, a, b, c, M[11].to_ulong(), 10, 0Xbd3af235);

                          II (c, d, a, b, M[ 2].to_ulong(), 15, 0X2ad7d2bb);

                          II (b, c, d, a, M[ 9].to_ulong(), 21, 0Xeb86d391);

    • 家园 感谢老兄的介绍,顶上去

      这方面的资料国内确实是不多,即便有,往往也是那种乱七八糟的演义体,什么独臂大盗啦,军统妖精啦等等,故事讲的百转千回,就是不讲密码到底是个什么样,如何加密,怎么分析怎么破。一言以蔽之,看完了还是跟没看一样。

      退一步而言,当年中国的密码战情况,哪怕有个整体的描述也好啊。可就我搜集的资料,都是一星半点,东鳞西爪,难以窥见全貌。

      老兄的介绍说的比较详细,很受教育。密码战从来是大家互相搞,没见谁光去破译别人而不被别人破译的。美国,英国,苏联,国民党,共产党,……都有成功的案例,也都有走麦城的时候,只是被破密码的级别和危害不同罢了。

      老兄如果资料凑手,再给兄弟们讲讲,如何?

    • 家园 非也,非也

      史料明确记载,中国也曾有过形式化的加密系统

      王语嫣走近身去,要瞧瞧信上还写些什么。包不同将信递了给她。王语嫣见信上写了七八行字,字迹清雅,颇有劲力,虽然每一个字都识得,但全然不成文理。她读这的书着实不少,这般文字却是第一次见到,皱眉道:“那是什么?”

      阿朱微笑道:“这是公冶二哥想出来的古怪玩意,是从诗韵和切音中变化出来的,平声

      字读作入声,入声字读作上声,一东的当作三江,如此掉来掉去。我们瞧惯了,便知信中之

      意,在外人看来,那是全然的不知所云。”

    • 家园 其实黑话就是最初级别的加密

      既然要编码再加密很麻烦,干脆直接文字翻文字好了,给你省个破译的工夫,可你也猜不出他说的是啥。

      • 家园 上班族黑话语录

        一、办公室工作语言

        1、原文:也许我可以加班把事情做完。(注释:你要我干到几点?还让不让活了?)

        2、原文:我不确定这样是不是能够实行。(注释:这根本一窍不通。)

        3、原文:真的吗?(注释:胡说八道!)

        4、原文:或许你可以去询问一下别人的看法。(注释:你等着看谁会理你!)

        5、原文:我当然也很关心。(注释:谁有空儿管这事啊!)

        6、原文:不好意思,我并没有参与这项计划。(注释:别烦我,这件事跟我有什么关系?)

        7、原文:嗯,这很有意思。(注释:这是什么东西!)

        8、原文:我会试着把这件事情插进工作进度中。(注释:你小子怎么不早一点儿交代?)

        9、原文:他可能不太熟悉这件事情。(注释:他脑袋里面装的是糨糊!)

        10、原文:所以你不太满意这件作品?(注释:该死的,你又想挑剔什么?)

        11、原文:我手边的工作量可能有一点过重了。(注释:我就领这一点儿薪水,你想累死我啊?)

        12、原文:我喜欢接受挑战。(注释:这是什么烂工作!)

        13、原文:我觉得这应该不会有问题。(注释:这关我什么事?)

        14、原文:你可能还不太了解。(注释:你脑子里是不是进水了?)

        15、原文:我了解,我了解。(注释:这家伙究竟说什么呢?)

        16、原文:是,我们是应该讨论一下。(注释:唉!又要开什么白痴会议!)

        二、工作评语

        1.普通员工(不是太聪明)

        2.格外出色(目前还没犯错误)

        3.善于社交(能喝)

        4.观察能力强(经常打小报告)

        5.工作态度热忱(固执己见)

        6.思维敏捷(能迅速找到借口)

        7.进取向上(常请大家吃饭)

        8.复杂工作上逻辑清晰(能把工作推给别人)

        9.判断能力强(手气不错)

        10.事业心强(暗地里害人)

        11.为人随和(随时可以解雇)

        12.模范员工(上班准时)

        13.善于释放压力(上班打瞌睡)

        14.工作第一位(丑得没有人约)

        15.独立工作能力强(谁也不知道他在干什么)

        16.眼光长远(总是一再拖延工作)

        17.具有极佳的口才(能瞎扯)

        18.沟通能力强(常打电话聊天)

        19.踏实忠诚(在别的地方很难找到工作)

        20.富于幽默感(能讲许多荤笑话)

    • 家园 沙发并献花
分页树展主题 · 全看首页 上页
/ 2
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河