RSA加密算法 源码

   RSA加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。
RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为
止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:
将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开
作为加密密钥。
 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA的安全性依赖于大
数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法
从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NP问题。   
 
  要一对密钥,使用其中一个加密,则需要用另一个才能解密。   
  RSA的算法涉及三个参数,n、e1、e2。 
  其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。   
  e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;
  再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。   
  (n及e1),(n及e2)就是密钥对。RSA加解密的算法完全相同,
  设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;   
  e1和e2可以互换使用,即:A=B^e2 mod n;B=A^e1 mod n;


以上部分内容取自百度百科片段:

整理者:张堂辉
微博:http://weibo.com/yanguer

博客:http://blog.sina.com.cn/u/1495182054



生成密钥:
void rsa_init( rsa_context *ctx, int padding, int hash_id);
int  rsa_gen_key( rsa_context *ctx, int (*f_rng)(void *),     
                 void *p_rng,
                 int nbits, int exponent );
                 
公钥操作                 
int rsa_public( rsa_context *ctx,
                const unsigned char *input,
                unsigned char *output )


私钥操作
int rsa_private( rsa_context *ctx,
                 const unsigned char *input,
                 unsigned char *output )




这是我们对字符数组zth进行公钥加密和私钥加密后的结果                 


rsa_public op=
9 f6 71 af c8 8d f3 d5 6e f e0 87 41 71 1 93 d6 ff 89 e9 b4 b4 a6 e0 bc 34 2a 7e 9a 9f 5a 54
77 93 f3 47 8b 88 25 fd 54 d6 85 cd 43 b8 26 37 6d 21 e7 23 68 de 51 38 70 7 e0 ae c7 5f 65 db
fb 3 93 9 d 9b 77 1 73 97 5a d4 13 86 6d f0 9a f 89 b1 41 6f 2f ad b7 cf cf 89 15 de ba 27
61 aa c5 9b a6 c3 f2 c4 96 c0 ca e2 ee 88 46 13 a4 be f8 95 1d 4e d4 20 a1 c6 f6 39 6c 7b 1e 8




rsa_private op=
a 35 50 eb a3 b0 e6 70 cb cf b2 ec 1b a9 e7 2c 41 bf 58 2f c8 52 8e da 76 2c e9 94 9b 29 c7 40
b4 a 8c 33 21 4 23 4b 9e 8d 99 5c 71 3f 13 bb 33 1 89 e3 26 93 d4 b5 5d cd b f d9 c2 2d 72
b8 a7 e4 fb d6 d5 2e 34 a2 73 1f d4 3a 82 16 95 14 df 7 d6 67 25 1c 49 69 d8 38 2b 1c 59 10 76

4 e9 45 b3 46 d5 27 8 4b e2 f 6e f3 ad d1 36 77 7e fb 66 9e 64 86 62 96 82 fe 1d 6f 42 3e d5


代码下载:http://yunpan.cn/QXCwmDpLKPY4n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值