c++ - 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 分配器是否这样做))
解决方案
在没有收到答案后,我从我的代码中选择了互斥锁,并在多线程同时使用 PrivateKey 对象来初始化多重加密器时测试了几次
我在第 2910 行的 intger.cpp(cryptoPP lib 源文件)处得到了一个断言
CRYPTOPP_ASSERT(bcLen <= N);
测试了大约 10 次,然后使用相同的断言,再次放置互斥锁并且断言消失了(在释放情绪中,我在 ntdll.dll 处得到 0xc000005(访问被拒绝),因为 HeapFree() 函数被调用时使用了错误的参数
推荐阅读
- git - Kdiff3 - 打开这些文件失败
- javascript - 如何为我的节点应用程序设置 https 证书?
- jquery - 通过 Google Optimize 用 JQuery替换标签的最佳方法
- sas - SAS ODS WORD 文件中的 Proc 报告正在删除边框
- java - Java 是否有“公共静态”顶级类?
- r - R - ggplot2 以日期作为 x 轴字符的问题
- c# - 为 System.Text.JsonSerializer 设置 RootAttribute?
- css - 似乎无法使用 flexbox 垂直分隔项目。Flex:列和空格似乎不起作用
- python - 在列dataFrame中添加数组
- python - 3列的python模式 - 关于方法的建议?