20

最愛のRabbitMQ 管理プラグインには、プレーンな HTTP リクエストを介して RabbitMQ を管理するためのHTTP APIがあります。

プログラムでユーザーを作成する必要があり、HTTP API が選択されました。ドキュメントは不足していますが、API は非常にシンプルで直感的です。

セキュリティを懸念して、ユーザー パスワードをプレーン テキストで渡したくありません。代わりに、API にはパスワード ハッシュを送信するためのフィールドが用意されています。そこから引用:

[取得 | 置く | 削除] /api/users/名前

個々のユーザー。ユーザーを PUT するには、次のようなボディが必要です。

{"password":"secret","tags":"administrator"}

また:

{"password_hash":"2lmoth8l4H0DViLaK9Fxi6l9ds8=", "tags":"administrator"}

tags キーは必須です。またはを設定passwordするpassword_hash必要があります。

これまでのところ、問題は次のとおりです。?を正しく生成するにはどうすればよいpassword_hashですか?

パスワード ハッシュ アルゴリズムは RabbitMQの構成ファイルで構成されており、デフォルトの SHA256 として構成されています。

私は C# を使用しており、次のコードを使用してハッシュを生成しています。

var cr = new SHA256Managed();
var simplestPassword = "1";
var bytes = cr.ComputeHash(Encoding.UTF8.GetBytes(simplestPassword));
var sb = new StringBuilder();
foreach (var b in bytes) sb.Append(b.ToString("x2"));
var hash = sb.ToString();

これはうまくいきません。SHA256 暗号化用のいくつかのオンライン ツールでテストすると、コードは期待どおりの出力を生成しています。ただし、管理ページに移動してユーザーパスワードを手動で「1」に設定すると、魅力的に機能します。

この回答により、構成をエクスポートし、RabbitMQ が生成しているハッシュを確認し、いくつかのことに気付きました。

  • 「1」のハッシュ例: 「y4xPTRVfzXg68sz9ALqeQzARam3CwnGo53xS752cDV5+Utzh」
  • すべてのユーザーのハッシュは固定長です
  • ハッシュは毎回変わります (パスワードが同じであっても)。PB2K もパスワードに対してこれを行うことは知っていますが、この暗号化プロパティの名前は知りません。
  • password_hashRabbitMQを渡すと、変更なしで保存されます

C# だけでなく、他のプログラミング言語でも提案を受け付けています。

4

11 に答える 11

14

から: http://rabbitmq.1065348.n5.nabble.com/Password-Hashing-td276.html

ただし、自分で実装する場合、アルゴリズムは非常に単純です。これが実際の例です:

ランダムな 32 ビット ソルトを生成します。

CA D5 08 9B

これをパスワードの UTF-8 表現 (この場合は「simon」) と連結します。

CA D5 08 9B 73 69 6D 6F 6E

MD5 ハッシュを取得します。

CB 37 02 72 AC 5D 08 E9 B6 99 4A 17 2B 5F 57 12

ソルトを再度連結します。

CA D5 08 9B CB 37 02 72 AC 5D 08 E9 B6 99 4A 17 2B 5F 57 12

base64 エンコーディングに変換します。

ytUIm8s3AnKsXQjptplKFytfVxI=

このプロセスに従うようにコードを変更できるはずです

于 2016-12-23T19:30:32.903 に答える