繁体   English   中英

使用ZeroMQ加密数据的建议

[英]Suggestion for encrypting data with ZeroMQ

我正在使用ØMQ进行练习,并使用cppzmq并参考zguide开发了一个简单的发布者/订阅者。 请找到与下面相同的代码片段,我能够成功发布和订阅数据,并且内存占用也相当可观。 由于这是分布式消息传递系统,因此我想在项目中使用它。

publisher.cpp

int main (int argc, char * argv[]) {
//  Prepare our context and publisher
zmq::context_t context(1);
zmq::socket_t publisher(context, ZMQ_PUB);

std::string addr("tcp://*:");
addr += ((argc > 1) ? std::string(argv[1]) : "5563");
std::string tappend((argc > 2) ? std::string(argv[2]) : "");
publisher.bind(addr.c_str());

struct timeval timeofday;

for(unsigned int idx = 0; idx < Total_Topics; ++idx)
{
    Topics.emplace(std::make_pair(idx, std::string("temperature/celsius" + tappend + std::to_string(idx))));
}

std::this_thread::sleep_for (std::chrono::seconds(2));

for(unsigned int NoOfTimes = 0; NoOfTimes < 20000; ++NoOfTimes)
{
    for(unsigned int count = 0; count < Topics.size(); ++count)
    {
      {
         Quote quote = {};
         quote.ticker = "BHELL";
         gettimeofday(&timeofday,NULL);
         quote.timestampus = timeofday.tv_usec;
         quote.timestamps = timeofday.tv_sec;

         std::stringstream ss;

         quote.value *= 0.1;
         quote.data = std::to_string(NoOfTimes) + std::to_string(count);

         ss << quote;

         s_sendmore(publisher, Topics[count]);
         std::cout << "Publish "<< Topics[count] << std::endl;
         s_send(publisher, ss.str());
      }
    }

    std::this_thread::sleep_for (std::chrono::seconds(8));
    }

    return 0;
}

subscriber.cpp

int main (int argc, char * argv[]) {
//  Prepare our context and subscriber
zmq::context_t context(1);
zmq::socket_t subscriber (context, ZMQ_SUB);

std::string addr("tcp://localhost:");
addr += ((argc > 1) ? std::string(argv[1]) : "5563");
std::string tappend((argc > 2) ? std::string(argv[2]) : "");
subscriber.connect(addr.c_str());

struct timeval timeofday;

std::string topic("");

for(unsigned int idx = 0; idx < Total_Topics; ++idx)
{
    topic = std::string("temperature/celsius" + tappend + std::to_string(idx));
    subscriber.setsockopt( ZMQ_SUBSCRIBE, topic.c_str(), topic.length());
}

while(1)
{
    {
        Quote quote;
        std::stringstream ss;

        std::string address = s_recv (subscriber);
        std::cout<<"Msg Rcvd" << std::endl;
        std::cout<<"Topic: " << address << std::endl;

        std::string contents = s_recv (subscriber);

        ss << contents;
        ss >> quote;

        gettimeofday(&timeofday,NULL);
        std::cout << "us diff  "  << (timeofday.tv_usec - quote.timestampus) << std::endl;
        std::cout << "Sec diff "  << (timeofday.tv_sec - quote.timestamps) << std::endl;
    }
}
    return 0;
}

现在,我想知道zeroMQ应该使用哪种安全技术。 我知道这里有curveZMQczmq 但是我不确定应该使用哪一个。 任何人都已经使用过这些工具中的任何一个,或者您具有用于ZeroMQ安全的其他任何库。 请指教。

在对zeroMQ加密进行进一步研究之后,我发现libcurve (C版)和libzmq (C ++版)支持曲线安全性。 默认情况下, libzmq支持曲线,而libcurve需要libsodium ,libzmq和czmq

要了解libcurve和libzmq曲线实现之间的区别,可以在此处进行讨论。

在此处找到使用libcurve的示例PUB / SUB实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM