小编use*_*147的帖子

简单查询哈希算法

阅读下面链接的文章后:

http://news.ycombinator.com/item?id=910203

我现在正在努力证明并理解为什么下面列出的哈希是不安全的,不应该由程序员练习.

H(k || m) - > SHA1("秘密密钥"+"name = bob,withdraw = $ 200")

H(m || k) - > SHA1("name = bob,withdraw = $ 200"+"secret-key")

正如文章所述,第一个例子完全是致命的.SHA1(以及MD5和许多其他哈希)是共享一个名为Merkle-Damgaard的通用设计的机器,这意味着它们以块长度块处理消息,并使用这些块来置换内部状态.输出SHA1是该状态的"最终"内容.但实际上没有什么能够"完成"SHA1状态; 如果您在线上看到SHA1值,您可以继续使用额外数据启动Merkle-Damgaard机器.这意味着您可以使用任意数据添加到新的消息中,这些数据会显示为真实的.这种攻击非常容易实施; 它需要大约20行Ruby代码.

第二个例子也被打破了,这是这篇博文的主题.如果你在消息之后加上键,你就不能继续用数据驱动哈希,因为你无法猜到的秘密就在它的末尾.

我在C#中编写了一个简单的哈希函数,试图证明作者声称的内容,但无论我添加/填充或在消息的后面/前面,无论如何我都无法做到这一点.

        string strRet;
        // hash contains the SHA 1 value of SHA1 (key + temp)
        string hash = "ce0037fbbff7a1b68b5794bd73dcc7d63338f115";

        try
        {
            string key = "password";
            string temp = "name=bob,withdraw=$200";

            for (int i = 0; i < 1000; i++)
            {
                byte[] buffer = Encoding.ASCII.GetBytes(temp);
                SHA1CryptoServiceProvider cryptoTransformSHA1 = new …
Run Code Online (Sandbox Code Playgroud)

c# hash cryptography sha

3
推荐指数
1
解决办法
718
查看次数

标签 统计

c# ×1

cryptography ×1

hash ×1

sha ×1