gpt4 book ai didi

c# - ZeroMQ C# Ironhouse 示例

转载 作者:太空狗 更新时间:2023-10-29 20:35:55 25 4
gpt4 key购买 nike

我是 ZeroMQ 的新手,一直在比较使用 ZeroMQ NuGet 包和 NetMQ & NetMQ Security NuGet 包的消息安全性.

到目前为止,我还没有找到使用 Curve Security 的 Ironhouse 示例的 C# 版本。 ZGuides repo 上有一个“待办事项”项目,但到目前为止还没有实现。 ( https://github.com/metadings/zguide/issues/1 )

我也在尝试确定 NetMQ.Security 安全方法是否优于 ZeroMQ 4 中内置的曲线安全方法。似乎大多数关于 Curve 的信息至少来自 2014 年或更早。

如有任何信息,我们将不胜感激!

最佳答案

发布者和订阅者都需要使用自己的一组公钥/私钥。在您的订户示例代码中,您设置了 CurvePublicKey(服务器的代码,这是错误的但仍然存在)但不设置 CurveSecretKey - 这就是为什么您得到“无法打开客户端 INITIATE担保”。这是您从另一个已解决的问题中得到的样本:

public class Program
{
static void Main(string[] args) {
using (var context = new ZContext()) {
Console.WriteLine($"Curve Supported: {ZeroMQ.ZContext.Has("curve")}");
byte[] serverPublicKey;
byte[] serverSecretKey;
Z85.CurveKeypair(out serverPublicKey, out serverSecretKey);

var publisher = new ZSocket(context, ZSocketType.PUB);
publisher.CurvePublicKey = serverPublicKey;
publisher.CurveSecretKey = serverSecretKey;
publisher.CurveServer = true;
publisher.Bind("tcp://*:5050");

var subscriber = new ZSocket(context, ZSocketType.SUB);
byte[] subPublicKey;
byte[] subSecretKey;
Z85.CurveKeypair(out subPublicKey, out subSecretKey);
subscriber.CurvePublicKey = subPublicKey;
subscriber.CurveSecretKey = subSecretKey;
subscriber.CurveServerKey = serverPublicKey;
ZError connectError;
subscriber.Connect("tcp://mybox:5050", out connectError);
if (connectError != null) {
Console.WriteLine($"Connection error: {connectError.Name} - {connectError.Number} - {connectError.Text}");
}
subscriber.SubscribeAll();

// Publish some messages
Task.Run(() => {
for (var i = 1; i <= 5; i++) {
var msg = $"Pub msg: {Guid.NewGuid().ToString()}";
using (var frame = new ZFrame(msg)) {
publisher.Send(frame);
}
}
});
Task.Run(() => {
// Receive some messages
while (true) {
using (var frame = subscriber.ReceiveFrame()) {
var msg = frame.ReadString();
Console.WriteLine($"Received: {msg}");
}
}
});
Console.WriteLine("Press ENTER to exit");
Console.ReadLine();
ZError subError;
subscriber.Disconnect("tcp://mybox:5050", out subError);
subscriber.Dispose();
ZError pubError;
publisher.Disconnect("tcp://*:5050", out pubError);
publisher.Dispose();
}
}
}

关于c# - ZeroMQ C# Ironhouse 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46723979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com