RSA算法C语言实现

一、源文件三个rsa.h , rsa.c  , main.c
//rsa.h
#include <stdio.h>
#define MAX_NUM 63001
#define MAX_PRIME 251

//! 返回代码
#define OK 100
#define ERROR_NOEACHPRIME 101
#define ERROR_NOPUBLICKEY 102
#define ERROR_GENERROR 103

unsigned int MakePrivatedKeyd( unsigned int uiP, unsigned int uiQ );
unsigned int GetPrivateKeyd( unsigned int iWhich );
unsigned int MakePairkey( unsigned int uiP, unsigned int uiQ, unsigned int uiD );
unsigned int GetPairKey( unsigned int &d, unsigned int &e );
void rsa_encrypt( int n, int e, char *mw, int iLength, int *&cw );
void rsa_decrypt( int n, int d, int *&cw, int cLength, char *mw );
void outputkey();

//rsa.c
#include "rsa.h"
//! 保存私钥d集合
struct pKeyset
{
unsigned int set[ MAX_NUM ];
unsigned int size;
}pset;

//! 保存公、私钥对
struct pPairkey
{
unsigned int d;
unsigned int e;
unsigned int n;
}pairkey;

// 名称:isPrime
// 功能:判断两个数是否互质
//   参数:m: 数a; n: 数b
// 返回:m、n互质返回true; 否则返回false

bool isPrime( unsigned int m, unsigned int n )
{
unsigned int i=0;
bool Flag = true;

if( m<2 || n<2 )
return false;

unsigned int tem = ( m > n ) ? n : m;
for( i=2; i<=tem && Flag; i++ )
{
bool mFlag = true;
bool nFlag = true;
if( m % i == 0 )
mFlag = false;
if( n % i == 0 )
nFlag = false;
if( !mFlag && !nFlag )
Flag = false;
}
if( Flag )
return true;
else
return false;
}

// 名称:MakePrivatedKeyd
// 功能:由素数Q、Q生成私钥d
//   参数:uiP: 素数P; uiQ: 素数Q
// 返回:私钥d

unsigned int MakePrivatedKeyd( unsigned int uiP, unsigned int uiQ )
{
unsigned int i=0;

//! 得到所有与z互质的数( 私钥d的集合 )
unsigned int z = ( uiP -1 ) * ( uiQ -1 );
pset.size = 0;
for( i=0; i<z; i++ )
{
if( isPrime( i, z ) )
{
pset.set[ pset.size++ ] = i;
}
}

return pset.size;
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值