問題タブ [rfc2898]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
29401 参照

asp-classic - AESを使用してVBScriptで暗号化する方法は?

特定のキーとIV値を使用して、VBScriptでRijndael/AESを使用して一部のデータを暗号化しようとしています。使用するのに適した関数ライブラリまたは COM コンポーネントはありますか?

私はCAPICOMを見ました。パスフレーズのみを許可し、特定のキーと IV 値を設定することはできません。

0 投票する
4 に答える
6410 参照

c# - C# の Rfc2898DerivedBytes に相当する Java

誰かが同等のことをしようとしたかどうか疑問に思っていました

ジャワで。secret は文字列 (パスワード) であり、saltValueBytes はバイト配列のソルトです。

私はいろいろ試しましたが、頭を包むことができないようです。

0 投票する
4 に答える
16497 参照

c# - Rfc2898DeriveBytes を使用した C# での PBKDF2 の実装

皆さん、私は C# で WPA 共有キーを作成する PBKDF2 関数を実装しようとしています。ここでいくつか見つけました: http://msdn.microsoft.com/en-us/magazine/cc163913.aspx有効な結果を生成しているように見えますが、1 バイトが短すぎます...そして間違った PSK 値です。

出力をテストするために、これと比較しています: http://www.xs4all.nl/~rjoris/wpapsk.htmlまたはhttp://anandam.name/pbkdf2/

Rfc2898DeriveBytes と呼ばれる C# の組み込みライブラリでこれを機能させる 1 つの方法を見つけました。これを使用して、次を使用して有効な出力を取得します。

ここで、Rfc2898DeriveBytes を使用する際の 1 つの制限は、「ソルト」の長さが 8 オクテットでなければならないことです。短い場合、Rfc2898DeriveBytes は例外をスローします。私がしなければならないことは、salt を 8 バイトにパディングすることだけだと思っていました (短い場合)。しかし、いいえ!パディングと短いソルトのほとんどすべての組み合わせを試しましたが、上記の 2 つの Web サイトから得た結果を複製することはできません。

要するに、これは Rfc2898DeriveBytes が 8 バイトより短いソースソルトでは単に機能しないということですか? もしそうなら、WPA 事前共有キー用に PBKDF2 を実装するために使用できる C# コードを知っている人はいますか?

0 投票する
3 に答える
18985 参照

.net - PasswordDeriveBytesとRfc2898DeriveBytes、廃止されましたが、はるかに高速です

TripleDes、DESなどのSymmetricAlgorithmから継承されたクラスに基づく暗号化機能に取り組んでいます。

基本的に、アルゴリズムクラスの一貫したキーとIVを生成するための2つのオプションがPasswordDeriveBytesありRfc2898DeriveBytes、どちらもDeriveBytes抽象クラスから継承します。

このPasswordDeriveBytes.GetBytes()メソッドは、.NET Frameworkで廃止としてマークされていますが、PBKDF2標準に一致するため、Rfc2898DeriveBytes.GetBytes()をお勧めします。ただし、私のテストに基づくと、GetBytes()Rfc2898DeriveBytesクラスで同じメソッドを呼び出すと、クラスのメソッドよりもほぼ15倍遅くなり、PasswordDeriveBytes予期しないCPU使用率(常に50%を超える)が発生します。

ここにいくつかのテストデータがあります:

  • 反復:100
  • アルゴリズムタイプ:DES
  • 元のテキスト:「私はテストキーです。暗号化してください」
  • 時間:
    • PasswordDeriveBytes:99ms
    • Rfc2898DeriveBytes:1,373ms

テストに基づくと、のパフォーマンスの低下はRfc2898DeriveBytes実稼働環境では許容できません。

誰かが以前にこの問題に気づいたことがありますか?パフォーマンスに影響を与えることなく、標準のソリューションを引き続き使用できるソリューションはありますか?廃止された方法を使用するリスクはありますか(将来のバージョンで削除される可能性があります)?

みんなありがとう!

編集:

おそらく問題がどこにあるかを見つけました...のデフォルトの反復回数PasswordDeriveBytesは100ですが、Rfc2898DeriveBytesは1000です。1000と同じ数に変更した後、実行Rfc2898DeriveBytesは2倍の時間になります。

0 投票する
3 に答える
3608 参照

security - パブリックオーバーライド関数GetBytes()Byte()は廃止されたため

詩人は何を言おうとしますか?

パブリックオーバーライド関数GetBytes()Byte()は廃止されたため、Rfc2898DeriveBytesはPasswordDeriveBytesに置き換わり、パスワードからキーマテリアルを取得します。これは新しいアプリケーションで推奨されます。

これを交換する必要があります...

...ものによって?

0 投票する
1 に答える
51679 参照

c# - パスワードをキーまたはIVとして直接使用する代わりに、Rfc2898DeriveBytesクラス(.NET内)を使用する必要があるのはなぜですか?

Rfc2898DeriveBytesを使用することと単に使用することの違いは何Encoding.ASCII.GetBytes(string object);ですか?

私はどちらのアプローチでも比較的成功しましたが、前者はより長く曲がりくねったアプローチですが、後者は単純で要点があります。どちらも最終的には同じことができるように見えますが、前者を後者よりも使用することのポイントを理解するのに苦労しています。

私が理解できた基本的な概念は、文字列パスワードをバイト配列に変換して、たとえば対称暗号化クラスに使用できるということですAesManaged。RFCクラスを介して、ただし、rfcオブジェクトを作成するときにsalt値とパスワードを使用できるようになります。私はそれがより安全だと思いますが、それでもそれはせいぜい知識のない推測です!また、特定のサイズのバイト配列を返すことができます。

これが私がどこから来たのかを示すためのいくつかの例です:

また

'rfcKey'オブジェクトは、対称暗号化アルゴリズムクラスで.Keyまたは.IVプロパティを設定するために使用できるようになりました。

すなわち。

'rj'は準備ができているはずです!

紛らわしい部分...'rfcKey'オブジェクトを使用するのではなく、'myPassInBytes'配列を使用して'rj'オブジェクトの設定に役立てることはできませんか?

私はVS2008でこれを試してみましたが、すぐに答えはNOです。しかし、RFCクラスが私が上で述べた他の代替案よりも使用される理由について、皆さんはより良い知識に基づいた答えを得ましたか?

0 投票する
2 に答える
1848 参照

security - パスワードハッシュを保護するためにソルトはランダムである必要がありますか?

私はセキュリティについてほとんど知らず(基本の基本的な説明を見つける必要があります)、.Netを使用してデータベースにユーザーパスワードを保存するための合理的な方法を考え出そうとしています。

これが私の現在の解決策です:

HashPassword()の結果をデータベースに保存します。ユーザーのパスワードを確認するには、次のようにします。

私の質問は、ソルトをランダムにしてこのようにDBに保存する必要があるのか​​、それとも10バイトのソルトを生成してコードに保存し、常に同じソルトを使用してソルトをDBに保存するのを節約できるのかということです。キーを保存しますか?

また、私がしていることに他の問題があれば、アドバイスをいただければ幸いです。

0 投票する
1 に答える
4928 参照

java - Java での RFC2898DeriveBytes の実装

プロジェクトの一環として、C# で暗号化された文字列を復号化する必要があります。この復号化は、AES アルゴリズムと PKCS7 としてのパッキング モードを使用して行われます。初期化ベクトルを生成するために、彼らは以下を使用しました:

ソルトはデフォルトのバイトです。

この IV は、AES を使用して文字列を暗号化する際に使用されます。

いくつかの文書を読んだところ、AES を Java で実装できることがわかりました。しかし、IVとパッキングモードを渡す方法がわかりません。

また、Cipher ブロック モードについて言及するためのモード CBC、ECB があることも確認しました。C# でどのモードが使用されているかわかりません。

以下はC#のコードです

Javaで同等のものを作成するのを手伝ってくれる人はいますか?

0 投票する
1 に答える
3343 参照

java - このC#暗号化関数をJavaに変換するにはどうすればよいですか?

以下のC#コードをJavaに変換する必要がありますが、C#のRfc2898DerivedBytesおよびRijndaelに相当するJavaは見つかりませんでした。

[アップデート]

この関数を使用して、新しく作成されたユーザーのパスワードを暗号化する必要があります。暗号化されたパスワードは、C#を含む他の呼び出し元によっても正しく復号化される必要があります。

コメントと回答に記載されているドキュメントに従い、すぐに確認できるように、以下にサンプルを書いてみます。

}

ただし、暗号文の長さは48ですが、実際にはC#ではこの形式のように見えます

WHUNV5xrsfETEiCwcT0M731 + Ak1jibsWEodJSaBraP1cmmkS1TpGWqwt / 6p / a7oy8Yq30ImZPbFF + Y0JNLa3Eu2UGuazZtuhEepUIIdaDEtA2FO0JYIj2A ==

合計120文字。

コードに何か問題がありますか?