C# 中的 CurveZMQ 示例以及为什么在使用 CurveZMQ 时不能使用 SetOption() 来CURVE_

本文关键字:CurveZMQ SetOption 不能 CURVE 中的 为什么 | 更新日期: 2023-09-27 17:56:48

我想使用CurveZMQ来确保客户端和服务器之间通信的安全身份验证和机密性。但是我在 C# 中找不到任何示例。我尝试逐步遵循 API 文档。我在设置CURVE_PUBLICKEY,CURVE_SECRETKEY和CURVE_SERVERKEY时遇到了问题。

这是我的代码。套接字'服务器。CurveSecretKey"抛出了类型为"ZeroMQ.ZException"的异常:at ZeroMQ.ZSocket.GetOption(ZSocketOption option, IntPtr optionValue, Int32& optionLength)''r' at ZeroMQ.ZSocket.GetOption(ZSocketOption option, Byte[]& value)''r' at ZeroMQ.ZSocket.get_CurveSecretKey()"

public static byte[] StringToByteArray(string hex)
    {
        return Enumerable.Range(0, hex.Length)
                         .Where(x => x % 2 == 0)
                         .Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
                         .ToArray();
    }
var context = new ZContext();
server = new ZSocket(context, ZSocketType.ROUTER);
server.SetOption(ZSocketOption.CURVE_SERVER, 1);
string curveSKey = "8E0BDD697628B91D8F245587EE95C5B04D48963F79259877B49CD9063AEAD3B7";
var skey = StringToByteArray(curveSKey);
server.SetOption(ZSocketOption.CURVE_SECRETKEY, skey);

你能用C#给我一些关于CurveZMQ的例子吗?

C# 中的 CurveZMQ 示例以及为什么在使用 CurveZMQ 时不能使用 SetOption() 来CURVE_

只需将 设置为 string,而不是 byte-array。

var skey = Encoding.ASCII.GetString(StringToByteArray(curveSKey));
server.SetOption(ZSocketOption.CURVE_SECRETKEY, skey);