首页 > 解决方案 > crypto++ 可以同时使用 [Private]key 对象[在多线程中]

问题描述

假设我们有全局CryptoPP::ECIES<CryptoPP::ECP>::PrivateKey mykey初始化对象,并且有 10 个线程CryptoPP::ECIES<CryptoPP::ECP>::Encryptor myencrypto(mykey)通过从 mykey 对象分配密钥来生成加密器对象

分配者将 mykey 作为参考

我是否需要一个 Mutex 来确保一次只有一个线程使用 mykey ,或者多个线程可以同时从 key 对象分配 enryptor 而没有任何问题(如果是的话,是否有保证)

(请注意,线程只同时从 mykey 分配,没有人修改它(我的代码不知道 cryptoPP 分配器是否这样做))

标签: c++multithreadingencryptioncryptographycrypto++

解决方案


在没有收到答案后,我从我的代码中选择了互斥锁,并在多线程同时使用 PrivateKey 对象来初始化多重加密器时测试了几次

我在第 2910 行的 intger.cpp(cryptoPP lib 源文件)处得到了一个断言

CRYPTOPP_ASSERT(bcLen <= N);

测试了大约 10 次,然后使用相同的断言,再次放置互斥锁并且断言消失了(在释放情绪中,我在 ntdll.dll 处得到 0xc000005(访问被拒绝),因为 HeapFree() 函数被调用时使用了错误的参数


推荐阅读