2013-02-25 4 views
0

Я пытаюсь хэш-файл (так называемый hash.txt) с использованием алгоритма (MD9), который я только что создал.Как хэш-файл с использованием алгоритма, который я создал

Вот код

<?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 />"; 

?> 

я получаю сообщение об ошибке "Предупреждение: хэш() [function.hash]: Неизвестный алгоритм хеширования: MD9"

Я пробовал хэшировать строку символов, используя тот же алгоритм, и он работает хорошо.

Я не знаю, в чем проблема с алгоритмом и файлами хеширования.

Кто-то сортировать меня пожалуйста

+2

Набор символов hash() не позволяет использовать «внешние» хеши. он имеет список встроенных, которые вы можете использовать, и ваш md9 не является его частью. именно поэтому вы строите свой собственный хэш? хэш-алгоритмы - это не то, что вы просто дергаете с задней стороны коробки с зерном. –

+0

Я думаю, что [PHP hash()] (http://php.net/manual/en/function.hash.php) не принимает определяемый пользователем алгоритм хэша ... – 2013-02-25 15:29:04

+0

хэш не узнает вас «md9» algo .. вы можете прочитать файл в строку и использовать свой алгоритм. – Gntem

ответ

3

Если вы читали документацию, вот link, вы увидите, что вы не можете просто подключить в любом алгоритме решать вам. «md9» ничего не значит для PHP. Это то, что вы создали. Вам нужно реализовать метод самостоятельно, хэш-файл и вызвать этот метод из файла filehash. Хотя, слово совета. Создание собственных алгоритмов хеширования - не самый безопасный метод. Установленные алгоритмы хэширования (sha1, sha-2) являются надежными.

+0

Спасибо @ChrisCooney, но как мне создать собственную функцию filehash(), которая будет реализовывать тот же эффект, что и встроенная функция hash()? – Richie

+0

Это для школьного/университетского проекта или для вашего личного кодирования? Если это для вашего личного кодирования, это действительно не очень хорошая идея. Если это для школьного проекта, они действительно не учат вас лучшей практике. Все-таки [этот вопрос] (http://stackoverflow.com/questions/6382579/sfguard-custom-algorithm-callable) похож на ваш, и должен поместить вас в правильное (небезопасное) направление. – christopher

+0

Это школьный проект, я даже сказал лектору, что я очень сомневаюсь, что это не сработает. Большое спасибо – Richie

Смежные вопросы