我是ZeroMQ的新手,并且一直在使用 ZeroMQ NuGet包和 NetMQ & NetMQ Security NuGet包。
到目前为止,我还没有找到使用Curve Security的Ironhouse示例的C#版本。有一个" todo" ZGuides repo上的项目,但到目前为止还没有实现。 (https://github.com/metadings/zguide/issues/1)
我也在尝试确定 NetMQ.Security 安全方法是否优于ZeroMQ 4中内置的曲线安全方法。看起来大多数有关Curve的信息至少来自2014年或更早。
非常感谢任何信息!
答案 0 :(得分:2)
发布者和订阅者都需要使用自己的一组公钥/私钥。在您的订阅者示例代码中,您设置了["request number 1 output first element", "request number 2 output first element", "request number 3 output first element", "request number 4 output first element"]
(对于服务器的代码,这是错误的但仍然是)但是没有设置CurvePublicKey
- 这就是为什么你得到"无法打开客户端INITIATE保证"。以下是您修复的另一个问题的样本:
CurveSecretKey
答案 1 :(得分:0)
确实,使用 NetMQ 的 C# 示例并不多。我发现这有效“CurveTests.cs”:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.support_simple_spinner_dropdown_item, productsCat);
arrayAdapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
categorie.setAdapter(arrayAdapter);
categorie.setOnItemSelectedListener(new SpinnersEvents());
product.setOnItemSelectedListener(new SpinnersEvents());
private class SpinnersEvents implements AdapterView.OnItemSelectedListener {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (parent.getId() == R.id.spCategorie){
String[] productsName = getProductName(productsCat[position]);
ArrayAdapter<String> arrayAdapterChild = new ArrayAdapter<String>(getBaseContext(),R.layout.support_simple_spinner_dropdown_item, productsName);
arrayAdapterChild.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
product.setAdapter(arrayAdapterChild);
}else{
price.setText(String.valueOf(tempList.get(position).getPrice()));
imgPrd.setImageResource(tempList.get(position).getImage());
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
重要说明 - 如果您想在不同的应用程序之间共享服务器公钥,请不要使用字符串表示 (serverPair.PublicKeyZ85),因为加密不起作用。我认为它与编码有关。更好地将字节数组表示保存到某个文件并共享它:
public void CurveTest()
{
var serverPair = new NetMQCertificate();
using var server = new DealerSocket();
server.Options.CurveServer = true;
server.Options.CurveCertificate = serverPair;
server.Bind($"tcp://127.0.0.1:55367");
var clientPair = new NetMQCertificate();
using var client = new DealerSocket();
client.Options.CurveServerKey = serverPair.PublicKey;
client.Options.CurveCertificate = clientPair;
client.Connect("tcp://127.0.0.1:55367");
for (int i = 0; i < 100; i++)
{
client.SendFrame("Hello");
var hello = server.ReceiveFrameString();
Assert.Equal("Hello", hello);
server.SendFrame("World");
var world = client.ReceiveFrameString();
Assert.Equal("World", world);
}
}