用 C 语言编RSA加、解密算法
一、RSA 算法的描述
1、随机选择两个秘密的素数 p 和 q;
2、计算公开的模数:
n pq=
;
3、计算秘密的
( ) ( 1)( 1)n p q
f
= - -
;
4、选择一个与
( )n
f
互素的 K,K 定义为 eord (e);
5、求 K 的乘法逆元素(d),用扩展欧几里德算法,模为
( )n
f
;
6、将明文 m(取值范围:0~n-1)进行
)
(
mod
e
m n
运算,完成加密,产生密文
c
;
7、将密文
c
(取值范围:0~n-1)进行
)
(
mod
d
c n
运算,完成解密,产生明文
m
。
二、C 程序
//RSA 算法的 C 程序实现
#include<stdio.h>
#include<math.h>
/*********数据处理子程序*********/
typedef __int64 lld; //数据处理,实现幂的取余运算
lld mod(lld a, lld b, lld c) //将数据的运算范围进行了一定的扩展
{
lld r=1;
a%=c;
while(b)
{
if(b&1)r=r*a%c;
b>>=1;
a=a*a%c;
}
return r;
}
/***********两数互素判断子程序***********/
int fun(int x,int y) //公钥 e 与 t 的互素判断
{
int t;
while(y)
{