我到处都在寻找答案,但是我认为我真正需要的是具有OpenSSL相关经验的人为我指明正确的方向。
在Python中,有一个库PyCryptodome,它具有多种加密算法(包括RSA)的纯Python实现。它们具有称为construct
的RSA模块的功能,该模块从其各种组件(construct
,n
,e
,d
和p
)构建RSA密钥。我虽然无法在OpenSSL中找到类似的功能,可能只是因为我不知道在其文档中的位置。
任何帮助将不胜感激。
OpenSSL允许您通过创建自己的RSA结构(通过q
)然后通过RSA_new()
,RSA_set0_key
和RSA_set0_factors
填充它来提供这些值。
[请注意,您仅可以使用RSA_set0_crt_params
来完全定义RSA公钥/私钥,但是传统上提供了多个其他值(例如n, e, d
和p
是形成模数的质数,而q
,[ C0]和iqmp
是CRT系数。
OpenSSL要求您提供这些作为dmp1
实例,并且通过dmq1
函数分配它们后<。当您在OpenSSL中看到具有该命名方案的函数时,表示您正在设置一个值,但不会增加引用计数,因此,如果您自己释放BN *
,它将在结构中成为无效指针。
set0
中确切地看到它的工作方式,但是我强烈建议您不要自己这样做,除非您对OpenSSL及其可疑之处非常满意。