⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zrsa.cpp

📁 RSA C++源代码DEMO,附加DESMD5等众多算法
💻 CPP
字号:
/*************************************************************************
**                                                                      **
**  zrsa.cxx                                                            **
**                                                                      **
**  INTERFACE FUNCTION FOR ZRSA                                         **
**                                                                      **
**  Copyright (c)1996 Markku-Juhani O. Saarinen <mjos@math.jyu.fi>      **
**                                                                      **
**  Rewriten by Alfred Meng <alfredmeng@163.net                         **
*************************************************************************/

#include <stdio.h>

#include "rsa.h"

extern "C" {

//-----------------------------------------------------------------------------
void rsa_keygen(int bits, char *pN, char *pE, char *pD)
//-----------------------------------------------------------------------------
{
	int    bits_p,bits_q;
    static kbn phi, p, q, e, d, n, one,pmod,qmod;
	static kbn p1mod;

	e.load((unsigned char *)"\x00\x01\x00\x01",4);

	bits_p = bits /2;
	bits_q = bits_p;

	one = 1;
	do{

	    // generate prime

		p = random_prime( bits_p );      
		q = random_prime( bits_q );
     
		// n = pq and j(n) = (p-1)(q-1)

		n = p * q;
		--p;
		--q;
		phi = p * q;
		++p;
		++q;

		// gcd(e, phi(n)) = 1 ===> e

    }while( one != gcd( e, phi ) );
       
    // ( e * d ) mod phi = 1 ===> d
    
    d = inverse( e, phi );

    strcpy(pN,n.saveasc());
    strcpy(pE,e.saveasc());
    strcpy(pD,d.saveasc());

    return;
}
//-----------------------------------------------------------------------------
void rsa_encrypt(char *pN, char *pE, char *pData,char *pOUT )
//-----------------------------------------------------------------------------
{
    static kbn n, e, m, f;

    n.loadasc(pN);
    e.loadasc(pE);
    f.loadasc(pData);

    m = modexp( f, e, n );

    strcpy(pOUT,m.saveasc());
}
//-----------------------------------------------------------------------------
void rsa_decrypt(char *pN, char *pD, char *pData, char *pOUT )
//-----------------------------------------------------------------------------
{
    rsa_encrypt(pN, pD, pData,pOUT );
}
//-----------------------------------------------------------------------------
void rsa_sign( char *pN, char *pD, char *hash, short hash_len, char *pSign)
//-----------------------------------------------------------------------------
{
    static kbn n, e, m, f;

    n.loadasc(pN);
    e.loadasc(pD);
    f.load((unsigned char *)hash,hash_len);

    m = modexp( f, e, n );

    strcpy(pSign,m.saveasc());
}
//-----------------------------------------------------------------------------
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -