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 に答える