RSA PKCS#1 V2.1在C++中的实现
RSA PKCS#1 V2.1 implementation in C++
在哪里可以找到C++中的RSA PKCS#1 V2.1实现
我在这里找到了一个实现,但我不确定它是否符合那个标准
有人能解释RSA算法的各种实现之间的主要差异吗?这些差异可能会导致操作上的不一致?
RSA算法是一个基元,可以用于两个目的:
- 保密性(即公钥加密),或
- 原产地证明(即,与加密哈希相结合的数字签名)
PKCS#1是标准,现在大多数人都提到基于RSA的加密和签名。更特别的是,PKCS#1(2.1)的最新版本定义了四种不同的方案:
- PKCS#1 v1.5加密(仅用于遗留目的,任何人都不应该再使用它)
- OAEP加密(对于任何新的实现都是首选)
- PKCS#1 v1.5签名
- PSS签名
换句话说,当你说"RSA PKCS#1 V2.1"时,你真的应该参考上面的任何一个方案,因为库可以实现这些方案的子集。
PKCS#1标准写得非常好,所以它的所有正确实现都是相互兼容的。由于除第一个方案外的所有方案都依赖于加密哈希,因此您还需要验证所选库是否包含您计划使用的库(例如SHA-256)。
我强烈建议通过查看测试向量集(有多少以及它们来自哪里)来判断库的质量。
尽管如此,正确的实现不一定是安全的 像Botan或Crypto++这样的开源C++库是一个不错的选择。您可能只想检查它们在目标平台上是否足够快,它们的许可证(分别为BSD和Public Domain)是否可接受,以及它们是否与您的平台兼容。
不要使用studentware库进行加密。它们维护不善,可能会导致错误。请使用众所周知的加密框架,如Crypto++。它们应该声称与标准兼容。您可以检查它们是否根据标准的参考测试向量进行测试;通常存在类似的东西。
如果库是FIPS或通用标准批准的(例如OpenSSL是FIPS批准的),则奖励额外的分数。
相关文章:
- 如果没有malloc,链表实现将失败
- 如何在c++中实现处理器调度模拟器
- 如何在c++中使用引用实现类似python的行为
- 实现无开销push_back的最佳方法是什么
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 实现一个在集合上迭代的模板函数
- 我应该实现右值推送功能吗?我应该使用std::move吗
- 如何正确实现和访问运算符的各种自定义枚举器
- C++Union/Struct位域的实现和可移植性
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 在c++中实现LinkedList时,应出现未处理的错误
- 为左值和右值的包装器实现C++范围
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- 使用GSoap实现ONVIF
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 用于AVX的ln(x)的实现,m256
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 在C++中,如何在类和函数(可能是模板化的)的头中编写完整的实现
- std::random_device是如何实现的