問題タブ [hash]
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.
random - MD5 が衝突を生成する前にランダムな要素はいくつありますか?
Amazon S3 に画像ライブラリがあります。画像ごとに、サーバー上のソース URL とタイムスタンプを md5 して、一意のファイル名を取得します。S3 はサブディレクトリを持つことができないため、これらすべての画像を 1 つのフラット フォルダーに保存する必要があります。
生成される MD5 ハッシュ値の衝突について心配する必要はありますか?
おまけ: MD5 が生成するハッシュ値で競合が発生する前に、いくつのファイルを作成できますか?
image - 画像の内容に対して MD5 を実行して、ランダムな画像に一意のファイル名を生成する際の注意事項はありますか?
画像ごとに一意のファイル名を生成したいので、MD5 を使用してファイル名を作成しています。2 つの同じ画像が異なる場所から取得される可能性があるため、実際には画像の内容に基づいてハッシュを作成したいと考えています。これにはどのような注意事項がありますか?
(価値があるためにPHP5でこれを行う)
asp.net - 転送中にデータが破損していないことを確認するためのデータのハッシュ
(asp.net環境下)
Web サービス経由で中央サーバーにデータを送信する予定で、転送中にデータが破損しないようにデータをハッシュしたいと考えています。
どのハッシュ方式を使用すればよいですか? Web サービスがオブジェクトを渡すときにハッシュできますか?
c# - CNG、CryptoServiceProvider、および HashAlgorithm のマネージド実装
そのため、ハッシュアルゴリズムのさまざまな実装に大きな違いがあるかどうか疑問に思っていました.SHAシリーズのアルゴリズムを例にとってみましょう。それらにはすべて、それぞれ 3 つの実装があり、1 つはマネージ コードで、2 つは異なるネイティブ暗号 API のラッパーですが、いずれかを使用する間に大きな違いはありますか? ネイティブ コードで実行されるため、ラッパー バージョンの方がパフォーマンスが高い可能性があると想像できますが、まったく同じ計算を実行し、同じ出力を提供する必要があります。つまり、互換性があります。これは正しいです?
たとえば、SHA512CNG は XP SP2 では使用できません (ドキュメントが間違っています) が、SHA512MANAGED は使用できます。
@マキシム - ありがとうございますが、私が求めていたものではありません。特定のハッシュ アルゴリズムの Managed/CryptoServiceProvider/CNG 実装を使用することで、おそらくパフォーマンス以外に違いがあるかどうかを尋ねていました。.NET 3.5 では、3 つの実装ですべてのハッシュ アルゴリズムを取得できるため、
SHA512マネージド SHA512CryptoServiceProvider SHA512Cng
後者の 2 つは、ネイティブ API のラッパーです。これは、たとえば、すべての SHAxxx 実装に当てはまります。
c# - ASP.NET の FormsAuthentication がない C# Windows アプリでのパスワード ハッシュ?
私の Win フォーム アプリは FormsAuthentication が気に入らないようです。ハッシュ化はまったく初めてなので、これを変換するための助けがあれば大歓迎です。ありがとう。
security - ハッシュのソルトを隠す必要性
職場では、塩について 2 つの競合する理論があります。私が取り組んでいる製品では、ユーザー名や電話番号などを使用してハッシュをソルトしています。基本的に、ユーザーごとに異なるものですが、私たちはすぐに利用できます。他の製品は、ユーザーごとにソルトをランダムに生成し、ユーザーがパスワードを変更するたびに変更します。その後、ソルトはデータベースで暗号化されます。
私の質問は、2 番目のアプローチが本当に必要かどうかです。純粋に理論的な観点からは、最初のアプローチよりも安全であることは理解できますが、実用的な観点からはどうでしょうか。現在、ユーザーを認証するには、ソルトを暗号化せずにログイン情報に適用する必要があります。
考えてみると、このアプローチによる実際のセキュリティの向上は見られません。アカウントごとにソルトを変更すると、攻撃者が各アカウントのソルトをすばやく判断する方法を知っていたとしても、誰かがハッシュ アルゴリズムをブルート フォースしようとすることは依然として非常に困難になります。これは、パスワードが十分に強力であることを前提としています。(明らかに、すべて 2 桁のパスワード セットの正しいハッシュを見つけることは、8 桁のパスワードの正しいハッシュを見つけるよりもはるかに簡単です)。私の論理が間違っていますか、それとも何かが欠けていますか?
編集:さて、ソルトを暗号化するのは本当に無意味だと思う理由は次のとおりです。(私が正しい軌道に乗っているかどうかを教えてください)。
以下の説明では、パスワードは常に 8 文字で、salt は 5 文字で、すべてのパスワードは小文字で構成されていると仮定します (計算が簡単になるだけです)。
エントリごとに異なるソルトを持つということは、同じレインボー テーブルを使用できないことを意味します (実際、技術的には、十分なサイズのテーブルがあれば使用できますが、それは今のところ無視しましょう)。これは、私が理解しているソルトへの本当の鍵です。なぜなら、すべてのアカウントを解読するには、いわばそれぞれのアカウントを再発明する必要があるからです。正しいソルトをパスワードに適用してハッシュを生成する方法を知っていれば、ソルトは実際にはハッシュされたフレーズの長さ/複雑さを拡張するだけなので、それを行います。したがって、ソルトが何であるかを知っているため、パスワード + ソルトを 13^26 から 8^26 に「知る」ために生成する必要がある可能な組み合わせの数を削減します。これで簡単になりましたが、それでも本当に難しいです。
それでは、ソルトの暗号化について説明します。ソルトが暗号化されていることがわかっている場合は、最初にそれを復号化しようとはしません (十分なレベルの暗号化があることがわかっている場合)。私はそれを無視します。それを解読する方法を見つけようとする代わりに、前の例に戻って、13^26 のすべてのキーを含むより大きなレインボー テーブルを生成します。ソルトを知らないと間違いなく遅くなりますが、最初にソルト暗号を解読しようとするという記念碑的なタスクが追加されるとは思いません. だからこそ、もったいないと思います。考え?
ブルート フォース攻撃に対してパスワードが保持される期間を説明するリンクは次のとおりです: http://www.lockdown.co.uk/?pg=combi
security - ユーザー認証をオフラインにするのに最適なモデルは何ですか?
私は認証をクライアント/サーバー アプリケーションに組み込んでいますが、受け取ったフィードバックの一部は、ハッシュ計算をサーバーに任せるべきだというものです (最初は、クライアントがハッシュを受信し、クライアントからハッシュを計算するように実装されていました)。入力したパスワードを比較してください)。それは理にかなっているように思えますが、問題が残っています.オフラインのユーザーを認証するにはどうすればよいですか?
たとえば、インターネットにアクセスできないモバイル デバイスに展開した場合、認証を処理する最も安全な方法は何ですか?
私の見方では、クライアントがハッシュ + ソルト情報を受信できるようにするか、別のピン/パスワードを使用してクライアントがそのパスワードのハッシュ + ソルトを受信できるようにする必要があります。
攻撃ベクトルを制限するように思われるため、私は後者を好みます。モバイル デバイスが危険にさらされた場合、システム全体 (たとえば、ネットワーク認証されたすべての部分) のセキュリティは損なわれません。
最良のオプションと考慮事項は何ですか?
perl - Perl:while($ key = each%hash)はkey=0で停止しません
もちろん、これは必要ありません。ここで何が起こっているのか知りたいだけです。私は何か簡単なものが欠けていますか?Perlのすべてのバージョンでこの動作に依存できますか?)
Perl v5.8.8:
出力
man perlfunc
$k
(each)は、 0が割り当てられたときにwhileループが続く理由を説明していません。コードは、while
ループの条件がであるかのように動作します($k = each %h, defined $k)
。
ループ条件が実際にに変更された場合、実際には
期待どおり($k = each %h, $k)
に停止し$k = 0
ます。
また$k = 0
、次の次の再実装のために停止しeach
ます。
出力だけ:
.net - System.Security.Cryptography に複数の異なるハッシュ アルゴリズム プロバイダがあるのはなぜですか?
MSDNで文書化されているように、さまざまなハッシュ アルゴリズム (MD5、SHA、RIPE など) の多くに対応するプロバイダーがいくつかあります。各アルゴリズムについて、利用可能な実装は次の 3 つのカテゴリのうちの 1 つに分類されるようです。
- [アルゴ] Cng
- [アルゴリズム] CryptoServiceProvider
- [アルゴ]マネージド
これらのハッシュ アルゴリズムの実装が複数存在するのはなぜですか?
実装の違いは何ですか?
アプリケーションで使用する実装を選択する際の実際的な違いは何ですか?
参考文献:
http://msdn.microsoft.com/en-us/library/system.security.cryptography.aspx
javascript - そこに良い JavaScript ハッシュ (コード/テーブル) 実装はありますか?
はい、JavaScript で通常のオブジェクトを連想配列として使用できることは知っていますが、Java の Map の実装 (HashMap、LinkedHashMap など) に近いものを使用したいと考えています。あらゆる種類のデータをキーとして使用できるもの。JavaScript の実装に適切なハッシュ (コード/テーブル) はありますか?