四种加密算法之RSA源代码-C++

RSA.h文件:

//! RSA 动态链接库实现   H文件
/*!
 @author 朱孟斌
 @e-mail  zmb.tsubasa@gmail.com
 @version 1.0
 @date 2011-03
 @{
*/
#ifndef RSA_H
#define RSA_H

#include <stdio.h>
#include <string>
#include <stdlib.h>   
#include <time.h>  
#include <math.h>
#include <malloc.h>
#include <iostream>
#include <ppl.h>

using namespace std;
using namespace Concurrency;
//! MAX是数组的最大个数,LEN为结构体slink的占用内存空间大小 */
#define MAX 100
#define LEN sizeof(struct slink)
//!   #能够进行动态链接库编译的RSA类
 /*!  
       @see class _declspec(dllexport) RSA
       将RSA算法写成动态链接库的形式方便调用,其中有公钥,私钥和明文
	   就可以进行明文的加密和解密
 */
class _declspec(dllexport) RSA
{
public:

	//! # 新定义的数据结构slink
	/*!  
	 @see struct slink
	 数据结构中,bignum存储的是随机生成的大数,next是指向后面的指针
	 @see int bignum[MAX]
	 */
	typedef struct slink
	{
		int  bignum[MAX];/*!< bignum[98]用来标记正负号,1正,0负bignum[99]来标记实际长度*/
		struct slink *next;
	}slink;

public:
	//! #RSA 的构造函数
    /*!
	 @see RSA()
      其中应该对RSA类中的一些变量进行相应的初始化
    */
	RSA();
	//! #RSA的析构函数
    /*!
	@see ~RSA()
      释放内存
    */
	~RSA();

public:
	//! #RSA的大数运算函数库

    /** @大数比较函数
	@see int cmp(int, int)
	*/
	int cmp(int a1[MAX],int a2[MAX]);
	/** @大数类型转换函数
	@see void mov(int a[MAX],int *b);
	*/
	void mov(int a[MAX],int *b);
	 /** @大数乘积函数
	 @see void mul(int a1[MAX],int a2[MAX],int *c);
	 */
	void mul(int a1[MAX],int a2[MAX],int *c);
	 /** @大数相加函数
	 @see void add(int a1[MAX],int a2[MAX],int *c);
	 */
    void add(int a1[MAX],int a2[MAX],int *c);
	 /** @大数大数相减函数
	 @see  void sub(int a1[MAX],int a2[MAX],int *c);
	 */
    void sub(int a1[MAX],int a2[MAX],int *c);
	 /*! @大数取模函数
	 @see void mod(int a[MAX],int b[MAX],int  *c);
	 @attention /c=a mod b//注意:经检验知道此处A和C的数组都改变了。
	 */
	void mod(int a[MAX],int b[MAX],int  *c);
	/*! @大数相除函数
	@see void divt(int t[MAX],int b[MAX],int  *c ,int *w);
	@attention //试商法//调用以后w为a mod b, C为a  div b;
	*/
	void divt(int t[MAX],int b[MAX],int  *c ,int *w);
	/*! @解决 了 m=a*b mod n;
	/*!
	@see void mulmod(int a[MAX] ,int b[MAX] ,int n[MAX],int *m);
	*/
	void mulmod(int a[MAX] ,int b[MAX] ,int n[MAX],int *m);
	/*! @解决 m=a^p  mod n的函数问题
	/*!
	@see void expmod(int a[MAX] ,int p[MAX] ,int n[MAX],int *m);
	*/
	void expmod(int a[MAX] ,int p[MAX] ,int n[MAX],int *m);
	/*!  @判断是否为素数
	@see int   is_prime_san(int p[MAX] );
	*/
	int   is_prime_san(int p[MAX] );
	/*! @判断两个大数之间是否互质
	@see int coprime(int e[MAX],int s[MAX]);
	*/
	int coprime(int e[MAX],int s[MAX]);
	/*!  @随机产生素数
	@see void prime_random(int *p,int *q);
	*/
	void prime_random(int *p,int *q);
	/*! @产生素数e
	@see void erand(int e[MAX],int m[MAX]);
	*/
	void erand(int e[MAX],int m[MAX]);
	/*! @根据规则产生其他的数
	@see void rsad(int e[MAX],int g[MAX],int *d);
	*/
	void rsad(int e[MAX],int g[MAX],int *d);
	/*! @求解密密钥d的函数(根据Euclid算法)
	@see unsigned long  rsa(unsigned long p,unsigned long q,unsigned long e);
	*/
	unsigned long  rsa(unsigned long p,unsigned long q,unsigned long e);
	
   //! #RSA的产生大数的公钥和私钥的函数
    /*!
	  @see bool RSAKey();
	  @param 没有任何输入,
      @param 随机产生e,d,n的函数,其运行时间比较长,需要等待
	  @return[bool] 成功返回true,失败返回false
    */
	bool RSAKey();

	//!  #RSA的进行文件加密的函数
    /*!
	  @see string tencrypto(int e[MAX], int n[MAX], char* text);
	  @param[int[] e,n为随机产生的公钥,利用公钥进行加密
      @param[char* text为明文,明文以char*的格式存储
	  @return[string] 返回值为加密成功之后的密文,采用string类型进行存储
    */
	string tencrypto(int e[MAX], int n[MAX], char* text);

    //! #RSA的进行文件解密的函数
    /*!
	  @see string tdecrypto(int d[MAX], int n[MAX], string text);
	  @param[int[] d,n为私钥,由函数RSAKey()产生
      @param[string text为密文,对应加密函数࿰
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值