心爱的RabbitMQ管理插件有一个HTTP API,可以通过普通的HTTP请求来管理RabbitMQ.
我们需要以编程方式创建用户,并且HTTP API是您选择的方式.文档很少,但API非常简单直观.
关注安全性,我们不希望以纯文本形式传递用户密码,而API提供了一个字段来代替发送密码哈希.从那里引用:
[GET | PUT | DELETE]/api/users/name
个人用户.要使用户,你需要一个看起来像这样的身体:
Run Code Online (Sandbox Code Playgroud){"password":"secret","tags":"administrator"}要么:
Run Code Online (Sandbox Code Playgroud){"password_hash":"2lmoth8l4H0DViLaK9Fxi6l9ds8=", "tags":"administrator"}标签键是必需的.无论是
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();
Run Code Online (Sandbox Code Playgroud)
这不起作用.在一些用于SHA256加密的在线工具中进行测试,代码产生了预期的输出.但是,如果我们转到管理页面并手动将用户密码设置为"1",那么它就像魅力一样.
这个答案让我导出配置并看看RabbitMQ正在生成的哈希值,我意识到了一些事情:
password_hashRabbitMQ存储它没有更改我也接受其他编程语言的建议,而不仅仅是C#.
我需要在网格的第二行添加一个矩形.我需要矩形的宽度与网格的宽度相同.
但问题是,网格的宽度是在运行时决定的.如果我尝试访问Width或ActualWidth在后面的代码,我得到NaN或0.0分别.
ColumnSpan并且Stretch也没有工作.这是代码:
<Grid x:Name="downloadPdfGrid">
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height ="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button x:Name="btn" Content="{Binding Button}" Visibility="Collapsed" Click="OnButtonClick" Grid.Row="0"/>
<Rectangle x:Name="underlineRect" Stretch="UniformToFill" Height="2" Fill="White" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="1"/>
</Grid>
Run Code Online (Sandbox Code Playgroud) 我正在使用div's as按钮转换为实际按钮,现在我需要让按钮填满容器的整个宽度.

码:
.container {
background-color: #ddd;
padding: 10px;
max-width: 500px;
margin-left: auto;
margin-right: auto;
}
.button {
display: block;
background-color: #bbb;
margin: 10px;
padding: 10px
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="button">
Fills the full width
</div>
<button class="button">
Does not fill the full width
</button>
</div>Run Code Online (Sandbox Code Playgroud)
添加display:block到.button不工作(虽然我敢肯定,一定是在回答部分?),而且也没有left: 0; right: 0.width: 100%一些工作,但它忽略容器的填充属性,并使按钮太靠近容器的右侧.
这是JSFiddle:http://jsfiddle.net/mn40mz2n/
我已经尝试了几乎所有垂直对齐的div技巧,我可以找到并仍然没有得到结果.这是一个已建立的响应式框架,因此我将其拆分为一些内联CSS来显示问题.
<div class="row uniform">
<div style="clear:none;width:25%;float:left;background:#CCC;box-sizing:border-box;">
box 1<br />
line 2
</div>
<div style="clear:none;width:25%;float:left;background:#a43c69;color:#FFF;box-sizing:border-box;">
box 2
</div>
<div style="clear:none;width:25%;float:left;background:#CCC;box-sizing:border-box;">
box 3
</div>
<div style="clear:none;width:25%;float:left;background:#a43c69;color:#FFF;box-sizing:border-box;">
box 4
</div>
</div> Run Code Online (Sandbox Code Playgroud)
理想情况下,框2,3和4与框1的高度相同,所有框中的文本在中间垂直对齐.
row.uniform设置了一些边距,填充和基线的默认垂直对齐,但这并没有影响到这里.
我正在尝试在 C# 程序集(目标.NET 4.0)中即时(以编程方式)生成自签名证书,以作为根 CA 生成其他证书。该证书不需要保留在 Windows 证书存储中,我会将其导出为文件。
通过阅读这个问题(特别是,@ dthorpe的答案),我决定给一个尝试CLR安全。
该CLR Security库在CngKey 类上放置了一个扩展方法来生成自签名证书,但我无法成功创建CngKeywith的实例:
var key = CngKey.Create(CngAlgorithm.Sha1); //same with Sha256, Sha512 and MD5
//or
var key = CngKey.Create(CngAlgorithm.Sha1, null, new CngKeyCreationParameters()
{
ExportPolicy = CngExportPolicies.AllowExport,
KeyUsage = CngKeyUsages.AllUsages,
KeyCreationOptions = CngKeyCreationOptions.MachineKey,
});
Run Code Online (Sandbox Code Playgroud)
这些行中的任何一行都会引发异常:
System.Security.Cryptography.CryptographicException 未处理
HResult=-2146893783
Message=不支持请求的操作。
Source=System.Core
StackTrace:
at System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options)
at System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters)
at …Run Code Online (Sandbox Code Playgroud) c# ×3
css ×2
.net ×1
.net-4.0 ×1
certificate ×1
css3 ×1
rabbitmq ×1
self-signed ×1
windows-8 ×1
winrt-xaml ×1