PBKDF2-SHA256パスワードハッシュを作成する必要がありますが、問題があります。C#/ Bouncy CastleでPBKDF2-SHA256パスワードハッシュを作成する方法
私はBouncy Castleレポをダウンロードしましたが、単体テストで探していたものが見つかりませんでした。
サンプルコードhereが見つかりましたが、これはSHA1のみです。重要なコードは次のとおりです。
/// <summary>
/// Computes the PBKDF2-SHA1 hash of a password.
/// </summary>
/// <param name="password">The password to hash.</param>
/// <param name="salt">The salt.</param>
/// <param name="iterations">The PBKDF2 iteration count.</param>
/// <param name="outputBytes">The length of the hash to generate, in bytes.</param>
/// <returns>A hash of the password.</returns>
private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes)
{
var pdb = new Pkcs5S2ParametersGenerator();
pdb.Init(PbeParametersGenerator.Pkcs5PasswordToBytes(password.ToCharArray()), salt,
iterations);
var key = (KeyParameter)pdb.GenerateDerivedMacParameters(outputBytes * 8);
return key.GetKey();
}
これをSHA1からSHA256に変更する必要があります。
Javaのドキュメントおよびthis postから、次のように見えますが、C#ライブラリのコンストラクタにオーバーロードはありません。
var pdb = new Pkcs5S2ParametersGenerator(new Sha256Derived());
は、スタックオーバーフローのanother articleを見つける、私は次が可能かもしれないと思ったが、SHAハッシュアルゴリズムは、ルックアップリストに含まれていないので、以下は動作しません。
var bcparam = (KeyParameter)pdb.GenerateDerivedParameters("sha256", outputBytes * 8);
これを機能させるには、何が必要ですか?
注:これを読んで、Bouncy Castleの仕組みは分かっていませんが、別の方法を知っていれば、私はまだあなたの助けに感謝します。
Pkcs5S2ParametersGeneratorのソースコード()変更するために利用可能です。なぜそれをしないのですか? –
@JamesKPolk - 有効なコメントです。その理由は次のとおりです。A.それは私がそれをよく理解していないからです。B.私はあなた自身を何らかの方法で巻き込むことは、暗号化に関しては深刻なノー・ノーと考えています。しかし、おそらくこれは設定を改ざんしているだけなので、大丈夫かもしれません。私は方法が必要であると仮定しましたが、多分C#BouncyCastleはJavaバージョンの後ろに遅れていて、それはちょうど含まれていませんか?実際にC#でこれを行う方法がない場合は、Javaバージョンに基づいてプルリクエストを試してコードを更新することがあります。本当にむしろ私はちょうど使用できる何かがありましたか? – HockeyJ