0

我正在尝试使用我刚刚创建的算法(MD9)对文件(称为 hash.txt)进行哈希处理。

这是代码

<?php


        function MD9($m)
        {
            static $s = array(
                 41,  46,  67, 201, 162, 216, 124,   1,  61,  54,  84, 161, 236, 240, 6,
                 19,  98, 167,   5, 243, 192, 199, 115, 140, 152, 147,  43, 217, 188,
                 76, 130, 202,  30, 155,  87,  60, 253, 212, 224,  22, 103,  66, 111, 24,
                138,  23, 229,  18, 190,  78, 196, 214, 218, 158, 222,  73, 160, 251,
                245, 142, 187,  47, 238, 122, 169, 104, 121, 145,  21, 178,   7,  63,
                148, 194,  16, 137,  11,  34,  95,  33, 128, 127,  93, 154,  90, 144, 50,
                 39,  53,  62, 204, 231, 191, 247, 151,   3, 255,  25,  48, 179,  72, 165,
                181, 209, 215,  94, 146,  42, 172,  86, 170, 198,  79, 184,  56, 210,
                150, 164, 125, 182, 118, 252, 107, 226, 156, 116,   4, 241,  69, 157,
                112,  89, 100, 113, 135,  32, 134,  91, 207, 101, 230,  45, 168,   2, 27,
                 96,  37, 173, 174, 176, 185, 246,  28,  70,  97, 105,  52,  64, 126, 15,
                 85,  71, 163,  35, 221,  81, 175,  58, 195,  92, 249, 206, 186, 197,
                234,  38,  44,  83,  13, 110, 133,  40, 132,   9, 211, 223, 205, 244, 65,
                129,  77,  82, 106, 220,  55, 200, 108, 193, 171, 250,  36, 225, 123,
                  8,  12, 189, 177,  74, 120, 136, 149, 139, 227,  99, 232, 109, 233,
                203, 213, 254,  59,   0,  29,  57, 242, 239, 183,  14, 102,  88, 208, 228,
                166, 119, 114, 248, 235, 117,  75,  10,  49,  68,  80, 180, 143, 237,
                 31,  26, 219, 153, 141,  51, 159,  17, 131, 20
            );

            // Step 1. Append Padding Bytes
            $pad = 16 - (strlen($m) & 0xF);
            $m.= str_repeat(chr($pad), $pad);

            $length = strlen($m);

            // Step 2. Append Checksum
            $c = str_repeat(chr(0), 16);
            $l = chr(0);
            for ($i = 0; $i < $length; $i+= 16) {
                for ($j = 0; $j < 16; $j++) {
                    // RFC1319 incorrectly states that C[j] should be set to S[c xor L]
                    //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
                    // per <http://www.rfc-editor.org/errata_search.php?rfc=1319>, however, C[j] should be set to S[c xor L] xor C[j]
                $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j]));
                $l = $c[$j];
            }
        }
        $m.= $c;

        $length+= 16;

        // Step 3. Initialize MD Buffer
        $x = str_repeat(chr(0), 48);

        // Step 4. Process Message in 16-Byte Blocks
        for ($i = 0; $i < $length; $i+= 16) {
            for ($j = 0; $j < 16; $j++) {
                $x[$j + 16] = $m[$i + $j];
                $x[$j + 32] = $x[$j + 16] ^ $x[$j];
            }
            $t = chr(0);
            for ($j = 0; $j < 18; $j++) {
                for ($k = 0; $k < 48; $k++) {
                    $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]);
                    //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]);
                }
                $t = chr(ord($t) + $j);
            }
        }

        // Step 5. Output
        return bin2hex(substr($x, 0, 16));
    }

    ?>

当我尝试跑步时

<?php

include 'md9.php';

class hashing {
     public static function filehash($file,$hash) {
     if (file_exists($file)) {
         return hash($hash,file_get_contents($file));
     }
     else {
         return "Error Occurred: File Does Not Exist";
     }
 }
 }

  echo hashing::filehash("hash.txt","md9")."<br />";

?>

收到错误“警告:hash() [function.hash]:未知散列算法:md9”

我尝试过使用相同的算法对一串字符进行散列处理,并且效果很好。

我不知道算法和散列文件有什么问题。

请有人帮我解决

4

1 回答 1

3

如果您阅读文档,这里是链接,您会发现您不能只插入您决定的任何算法。“md9”对 PHP 没有任何意义。这是你编造的东西。您需要自己实现该方法,对文件进行哈希处理,然后从 filehash 中调用该方法。虽然,一个忠告。编写自己的哈希算法并不是最安全的方法。已建立的散列算法(sha1、sha-2)被证明是安全的。

于 2013-02-25T15:30:38.010 回答