2017-05-03 10 views
0

私はPHPに変換する必要があるC#の以下の関数を持っています。C#のハッシュ関数をPHPに変換する必要があります

C#:

public string ComputeSaltedHash() 
    { 
     // Create Byte array of password string 
     ASCIIEncoding encoder = new ASCIIEncoding(); 
     Byte[] _secretBytes = encoder.GetBytes(_password); 

     // Create a new salt 
     Byte[] _saltBytes = new Byte[4]; 
     _saltBytes[0] = (byte)(_salt >> 24); 
     _saltBytes[1] = (byte)(_salt >> 16); 
     _saltBytes[2] = (byte)(_salt >> 8); 
     _saltBytes[3] = (byte)(_salt); 

     // append the two arrays 
     Byte[] toHash = new Byte[_secretBytes.Length + _saltBytes.Length]; 
     Array.Copy(_secretBytes, 0, toHash, 0, _secretBytes.Length); 
     Array.Copy(_saltBytes, 0, toHash, _secretBytes.Length, _saltBytes.Length); 

     SHA1 sha1 = SHA1.Create(); 
     Byte[] computedHash = sha1.ComputeHash(toHash); 

     return encoder.GetString(computedHash); 
    } 

注:私はC#の側に何もすることができません。

編集1:

PHPコード(これまでに換算):

function ComputeSaltedHash($Pass, $Salt) { 

$secretBytes = array(); 
for($i = 0; $i < strlen($Pass); $i++) 
{ 
    $secretBytes[] = ord($Pass[$i]); 
} 

$saltBytes = array(4); 
$saltBytes[0] = ConverttoByte($Salt >> 24); 
$saltBytes[1] = ConverttoByte($Salt >> 16); 
$saltBytes[2] = ConverttoByte($Salt >> 8); 
$saltBytes[3] = ConverttoByte($Salt); 

$result = array_merge($secretBytes, $saltBytes); 

// Need to convert SHA1 & onward } 

C#のコードの最後の3行を変換する必要があります。

編集2:(回答)

function ComputeSaltedHash($Pass, $Salt) { 

// Create Byte array of password string 
$secretBytes = array(); 
for($i = 0; $i < strlen($Pass); $i++) 
{ 
    $secretBytes[] = ord($Pass[$i]); 
} 

// Create a new salt 
$saltBytes = array(4); 
$saltBytes[0] = ConverttoByte($Salt >> 24); 
$saltBytes[1] = ConverttoByte($Salt >> 16); 
$saltBytes[2] = ConverttoByte($Salt >> 8); 
$saltBytes[3] = ConverttoByte($Salt); 

// Append the two arrays 
$result = array_merge($secretBytes, $saltBytes); 

// Convert array into string for SHA1 
$output = sha1(implode(array_map("chr", $result)), true); 

// ASCII only defines mappings for values 0–127. Replace values greater than 127 with ? 
for ($i = 0; $i < strlen($output); $i++) { 
    if ($output[$i] > chr(127)) { 
     $output[$i] = '?'; 
    }  
} 

// Final Result 
return $output; } 
+1

あなたの最高の試みはまだありますか? – Kempeth

+0

1つのアプローチは、各行が何をしているかを調べ、PHPでそれを行う方法を見つけて、それを書くことです。 – Orangesandlemons

+0

** 1 **パートの編集を参照してください。 – ARL

答えて

0

最終的なコード:

function ComputeSaltedHash($Pass, $Salt) { 
// Create Byte array of password string 
$secretBytes = array(); 
for($i = 0; $i < strlen($Pass); $i++) 
{ 
    $secretBytes[] = ord($Pass[$i]); 
} 

// Create a new salt 
$saltBytes = array(4); 
$saltBytes[0] = ConverttoByte($Salt >> 24); 
$saltBytes[1] = ConverttoByte($Salt >> 16); 
$saltBytes[2] = ConverttoByte($Salt >> 8); 
$saltBytes[3] = ConverttoByte($Salt); 

// Append the two arrays 
$result = array_merge($secretBytes, $saltBytes); 

// Convert array into string for SHA1 
$output = sha1(implode(array_map("chr", $result)), true); 

// ASCII only defines mappings for values 0–127. Replace values greater than 127 with ? 
for ($i = 0; $i < strlen($output); $i++) { 
    if ($output[$i] > chr(127)) { 
    $output[$i] = '?'; 
    }  
} 

// Final Result 
return $output; 
} 
0

あなたは(、両方を追加ハッシングと返す)最後の3行のあなたの質問のための具体的な答えをしたいと次のとおりです:

// Append the two arrays 
$toHash = array_merge($_secretBytes, $_saltBytes); 

$computedHash = sha1(implode(array_map("chr", $toHash)), true); 

return $computedHash; 

聞く、質問する。

関連する問題