c# - 如何为 RabbitMQ 管理 HTTP API 生成 password_hash

标签 c# rabbitmq rabbitmqadmin

心爱的人RabbitMQ Management Plugin有一个HTTP API通过纯 HTTP 请求管理 RabbitMQ。

我们需要以编程方式创建用户,而 HTTP API 是我们选择的方式。文档很少,但 API 非常简单直观。

考虑到安全性,我们不想以纯文本形式传递用户密码,API 提供了一个字段来发送密码哈希值。从那里引用:

[ GET | PUT | DELETE ] /api/users/name

An individual user. To PUT a user, you will need a body looking something like this:

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

or:

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

The tags key is mandatory. Either password or password_hash must be set.

到目前为止一切顺利,问题是:如何正确生成password_hash

password hashing algorithm在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”,那么它就像一个魅力。

This answer引导我导出配置并查看 RabbitMQ 生成的哈希值,我意识到了一些事情:

  • “1”的哈希示例:“y4xPTRVfzXg68sz9ALqeQzARAM3CwnGo53xS752cDV5+Utzh”
  • 所有用户的哈希值都是固定长度
  • 哈希值每次都会改变(即使密码相同)。我知道 PB2K 也会对密码执行此操作,但不知道此加密属性的名称。
  • 如果我传递了 password_hash,RabbitMQ 会原封不动地存储它

我也接受其他编程语言的建议,而不仅仅是 C#。

最佳答案

为了好玩,bash 版本!

#!/bin/bash

function encode_password()
{
    SALT=$(od -A n -t x -N 4 /dev/urandom)
    PASS=$SALT$(echo -n $1 | xxd -ps | tr -d '\n' | tr -d ' ')
    PASS=$(echo -n $PASS | xxd -r -p | sha256sum | head -c 128)
    PASS=$(echo -n $SALT$PASS | xxd -r -p | base64 | tr -d '\n')
    echo $PASS
}

encode_password "some-password"

关于c# - 如何为 RabbitMQ 管理 HTTP API 生成 password_hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306350/

相关文章:

c# wpf importing excel 性能

javarabbitmq确认无效

从 amqp 客户端到 rabbitmq 服务器的 Java 8 SSL 握手失败

java - pythonrabbitmqadmin listqueues命令虽然存在消息但无法获取消息内容

c# - 制作 Gridview 列居中和右对齐 (MiddleRight)

c# - WPF UI 更新线程问题

authentication - rabbitmq管理插件中基于证书的身份验证

json - 如何使用 rabbitmqadmin 命令发布 Json

linux - 在 linux 上安装 rabbitmqadmin

c# - 不要在外壳托盘上显示窗口