我一直致力于基于RSA密钥交换的项目,我使用了Crypto ++ Library。我按照https://www.cryptopp.com/wiki/Raw_RSA中的指南进行操作,我的项目运行正常。但是,我注意到公钥总是固定为17 10 = 11 16 ,当我在Crypto ++中查看rsa.cpp时,公钥是固定的!
同样,我的项目工作正常,但我只是想知道为什么......
答案 0 :(得分:2)
我注意到公钥总是固定为17 10 = 11 16 ,当我在Crypto ++中查看rsa.cpp时,公钥是固定的!<登记/> ...我的项目工作正常,但我只是想知道为什么......
这是公众指数,你可以改变它。请参阅InvertibleRSAFunction Class Reference。
如果您不熟悉该库,则 InvertibleRSAFunction
是一个奇怪的名称,但在rsa.h
中有typedef InvertibleRSAFunction PrivateKey
的类型定义。 RSA::PrivateKey
Initialize
的{{1}}函数是RandomNumberGenerator
创建密钥的函数:
void Initialize (RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e=17)
公共指数(e
)的唯一要求是它必须是 phi 的共同素数或相对素数。 Phi 是Euler的Φ-函数,它被定义为(p-1)*(q-1)
。它确保存在逆(私有指数,d
)。
通常选择公共指数用于低汉明度权重以使公钥操作更快。较低的汉明重量意味着它只有很少的1,典型值是3(0x3),17(0x11)和65537(0x10001)。较少的1使得公钥操作的取幂速度很快。
为完整起见,公钥为 {n,e}
。私钥是 {n,e,d}
。带有CRT参数的私钥为 {n,e,d,p,q,dp,dp,u}
。