ZeroMQ C#Ironhouse的例子

我是ZeroMQ的新手,并且一直在使用ZeroMQ NuGet包和NetMQNetMQ Security NuGet包来比较消息的安全性。

到目前为止,我还没能找到使用Curve Security的Ironhouse示例的C#版本。 ZGuides回购中有一个“todo”项目,但到目前为止还没有实现。 ( 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(); } } }