【问题标题】:PHP hashing method, same output every timePHP哈希方法,每次输出相同
【发布时间】:2018-04-15 22:29:31
【问题描述】:

因此,如果我执行sha1($data) 之类的操作,结果将是BLAHBLAH123。但是,如果我再做一次,它将是BLAHAHS316md5 也会发生同样的事情。所以我的问题是,什么是哈希值的一致方式?

所以就像function($data) 每次使用相同的$data 参数评估时都会返回BLAHBLAHBLAH123

编辑:我对此有一个特定的目的,它不是密码,所以安全不是问题。

编辑:例如,md5($data) 不会每次都返回 BLAHBLAH,有时它会返回 BLAHHHAL。我不想要那个。我希望它每次都返回相同的东西,BLAHBLAH

【问题讨论】:

    标签: php hash


    【解决方案1】:

    只有当输入发生变化时,哈希运算的输出才会发生变化。

    例如:

    echo sha1( 'test' );
    
    a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
    

    如果您希望它每次都更改,您可以在输入中附加时间戳:

    echo sha1( 'test'.time() )
    
    3d68b7693768f199623f31f820b1ba29b0a58769
    

    【讨论】:

    • 我试过做 sha1 并且它每隔一段时间就改变一次。我希望它保持不变而不改变。
    • 你能确认$data 没有改变吗?
    • 让我再试一次,我可能错了。是的,我可以。
    • 好吧,你是对的。我想我第一次做错了什么。谢谢!
    【解决方案2】:

    散列函数是deterministic(如果不是这种情况,它们将毫无用处)。

    在计算机科学中,确定性算法是一种算法,在给定特定输入的情况下,总是会产生相同的输出,而底层机器总是通过相同的状态序列。

    如果您想要“不同的输出”,请考虑在sha1(microtime() . $data) 中向域输入另一个(例如时间)输入。我不确定这在实践中会有多大用处。

    密码哈希函数使用salt(随机生成,单独存储)作为附加输入,因此相同的纯文本密码将导致不同的存储哈希值。

    【讨论】:

      【解决方案3】:

      哈希方法 - 给出相同的值,但不容易预测或解码是我认为你正在寻找的。​​p>

      您可以使用常量字符串 val 并对该字符串进行哈希处理以获得相同的值,如果您想更改值,您可以更改常量并获得不同的哈希值

      $constStr = "hashThis";
      $hashWord = md5($constStr);
      
      // it will return the same value always, as long as the constStr is the  same
      

      【讨论】:

        【解决方案4】:

        两个不同的输入具有相同的md5sha1 输出?

        这是可能的,但很难。看这里:https://crypto.stackexchange.com/questions/1434/are-there-two-known-strings-which-have-the-same-md5-hash-value

        【讨论】:

          【解决方案5】:

          只要你的 $data 变量改变,返回值就会改变,你不能从不同的字符串中得到相同的哈希值

          【讨论】:

            猜你喜欢
            • 2014-07-16
            • 1970-01-01
            • 2022-01-08
            • 2020-07-18
            • 2021-09-21
            • 2015-10-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多