我一直在做一个基于RSA密钥交换的项目,我使用了Crypto++库。我遵循了https://www.cryptopp.com/wiki/Raw_RSA我的项目运行良好。然而,我注意到公钥总是固定为1710=1116,当我在Crypto++中查看rsa.cpp时,公钥是固定的!
再说一遍,我的项目运行良好,但我只想知道为什么。。
我注意到公钥总是固定为1710=1116,当我在Crypto++中查看rsa.cpp时,公钥是固定的
…我的项目做得很好,但我只想知道为什么。。
这是公共指数,您可以更改它。请参阅InvertibleRSAFunction类引用。
如果您不熟悉库,InvertibleRSAFunction
是一个奇怪的名称,但在rsa.h
中有一个为typedef InvertibleRSAFunction PrivateKey
定义的类型。RSA::PrivateKey
的Initialize
函数采用RandomNumberGenerator
,它创建密钥:
void Initialize (RandomNumberGenerator &rng, unsigned int modulusBits, const Integer &e=17)
对公共指数(e
)的唯一要求是它必须是同素或相对素的phiPhi是欧拉Φ-函数,定义为(p-1)*(q-1)
。它确保有一个逆(私有指数d
)。
公共指数通常被选择为较低的hamming权重,以使公钥操作更快。低hamming权重意味着它只有很少的1,典型值为3(0x3)、17(0x11)和65537(0x10001)。更少的1使公钥运算的求幂速度更快。
为了完整性,公钥是{n,e}
。私钥是{n,e,d}
。具有CRT参数的私钥是{n,e,d,p,q,dp,dp,u}
。