2017-06-08 10 views
-1

私は実際にコードをダンプして回答を期待していませんが、これは後でデータベースに保存された値と比較するためにパスワードをハッシュする非常に長い関数です。PHPの同等のパスワード次の.NETコードのハッシュ

私は人々がPHPのmd5()関数で達成できるものを再現しようと時間を無駄にした記事を見ました。

任意の暗号の知識を持つ誰かがPHPで以下の効果を達成するためにPHPと同等の知っている場合そのため、私は思ったんだけど:

internal static string GenerateEncryptedPassword(string password, string salt, int iterationCount) 
    { 
     byte[] passwordBytes = Encoding.UTF8.GetBytes(password); 
     byte[] saltBytes = Encoding.UTF8.GetBytes(salt); 
     byte[] iterationCountBytes = BitConverter.GetBytes(iterationCount); 
     int derivedLength = passwordBytes.Length + saltBytes.Length; 
     byte[] passwordSaltBytes = new byte[derivedLength]; 
     byte[] pbkdf2Bytes; 
     string encryptedString; 

     for (int i = 0; i < passwordBytes.Length; i++) 
     { 
      passwordSaltBytes[i] = passwordBytes[i]; 
     } 

     for (int i = 0; i < saltBytes.Length; i++) 
     { 
      passwordSaltBytes[passwordBytes.Length + i] = saltBytes[i]; 
     } 

     using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, passwordSaltBytes, iterationCount)) 
     { 
      pbkdf2Bytes = pbkdf2.GetBytes(derivedLength + iterationCountBytes.Length); 
     } 

     using (SHA512 sha512 = new SHA512Managed()) 
     { 
      byte[] hashBytes = sha512.ComputeHash(pbkdf2Bytes); 
      byte[] hashSaltBytes = new byte[hashBytes.Length + saltBytes.Length]; 

      for (int i = 0; i < hashBytes.Length; i++) 
      { 
       hashSaltBytes[i] = hashBytes[i]; 
      } 

      for (int i = 0; i < saltBytes.Length; i++) 
      { 
       hashSaltBytes[hashBytes.Length + i] = saltBytes[i]; 
      } 

      encryptedString = Convert.ToBase64String(hashSaltBytes); 
     } 

     return encryptedString; 
    } 

それが何かを変更した場合、私はLaravelを使用しています。.. 。

はどんな指導をありがとう


私は、暗号化を嫌い:D

$user = \App\User::all(); 
$salt = strtolower($user[2]->Salt); 
$password = '[email protected]$$W0rd'; 
$dbPassword = $user[2]->Password; 
$iterations = 10000; 

echo openssl_pbkdf2($password, $salt, 44, $iterations, 'sha512'); 

答えて

0

password_hashとpassword_verifyのPHPマニュアルをお読みください。アルゴリズムとしてBCryptを使用することをお勧めします。

http://php.net/manual/en/function.password-hash.php

http://php.net/manual/en/function.password-verify.php

全然難しいことではありません!がんばろう! :-)

また、SHA-512はすべて安全ではありません。ここで読む:SHA1 vs md5 vs SHA256: which to use for a PHP login?

+0

私の同僚がすでに行っていることを再現しなければならないので、何も使用できません。同じハッシュを出力する必要があります。私は確かにここに投稿する前にいくつかのことを試しましたが、もう一度見ていきます。ありがとうございます。 – Anaconda

+0

SHA512を使用してpassword_hash()を試すこともできます。そのオプションを確認してください! – delboy1978uk

+0

また、私はオプションを見てきましたが、私は明らかに十数個の組み合わせとオーバーロードを実行しました。そのため、PHPで便利にすばやく行う方法を誰かが知っていることを期待して、ここにコードを貼り付けることにしました。 – Anaconda

0

私は物事を行うための新しい方法があるかどうかを確認しますので、年間のPHPのない使用していないが、しかし、あなたは、OpenSSLとSHA-512ハッシュを生成することができます:塩を生成するにはhttp://php.net/manual/en/function.openssl-digest.php

openssl_digest(pbkdf2Bytes, 'sha512'); 

を安全で(予測できない)ランダムを使用することを強くお勧めします。あなたはまた、OpenSSLの直接pbkfd2を生成することができます : http://php.net/manual/en/function.openssl-pbkdf2.php

はちょうどあなたがダイジェストアルゴリズムを定義し、関数シグネチャの最後にオプションのパラメータに注意してください。PHP random string generator

EDIT:PHPの場合は、これを参照してください

+0

ご意見ありがとうございます。これは塩をサポートしていますか? – Anaconda

+0

私はあなたの質問に答えるための編集を行いました:)一般的に言えば、必要なデータはすべてハッシュできます。あなたのコードスニペットでsalt + passwordを連結しました。これは問題ありません。 – quinz

+0

ご協力いただきありがとうございます。 :) – Anaconda