首页 > 代码库 > RSA加密:利用模数和指数生成公钥加密
RSA加密:利用模数和指数生成公钥加密
引子
目前做一款金融产品,由于涉及到资金安全,采用动态公钥的方式,即客户端每次登录服务端返回一个不同的XML串,由公钥的模数和指数构成,我需要用这个串生成公钥加密相关信息。
服务端返回的XML串形如:“<RSAKeyValue><Modulus>wVwBKuePO3ZZbZ//gqaNuUNyaPHbS3e2v5iDHMFRfYHS/bFw+79GwNUiJ+wXgpA7SSBRhKdLhTuxMvCn1aZNlXaMXIOPG1AouUMMfr6kEpFf/V0wLv6NCHGvBUK0l7O+2fxn3bR1SkHM1jWvLPMzSMBZLCOBPRRZ5FjHAy8d378=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue> ”
推荐看下这篇博客快速了解一下RSA:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
问题
- 对RSA不了解。
- 如何用所谓的模数和指数生成公钥来加密相关信息。
过程
熟悉RSA。先看下openssl库中RSA结构体的定义。
struct rsa_st{/* The first parameter is used to pickup errors where* this is passed instead of aEVP_PKEY, it is set to 0 */int pad;long version;const RSA_METHOD *meth;/* functional reference if ‘meth‘ is ENGINE-provided */ENGINE *engine;BIGNUM *n;BIGNUM *e;BIGNUM *d;BIGNUM *p;BIGNUM *q;BIGNUM *dmp1;BIGNUM *dmq1;BIGNUM *iqmp;/* be careful using this if the RSA structure is shared */CRYPTO_EX_DATA ex_data;int references;int flags;/* Used to cache montgomery values */BN_MONT_CTX *_method_mod_n;BN_MONT_CTX *_method_mod_p;BN_MONT_CTX *_method_mod_q;/* all BIGNUM values are actually in the following data, if it is not* NULL */char *bignum_data;BN_BLINDING *blinding;BN_BLINDING *mt_blinding;};
开始推荐的博客中有关于RSA模数和指数的介绍,对应到结构中分别是其中的 n 和 e ,模反数对应d,最开始的质数因子对应 p和 q。n和e决定了公钥,n和d决定了私钥。结构体中其它元素不论,能知道的是可以由模数和指数生成公钥。
待续。。。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。