RSA签名算法-C++实现

本文分享了作者在密码设计课程中编写的RSA算法代码,包括密钥生成、加密、解密等核心功能的实现细节。通过对随机素数生成、快速幂运算、扩展欧几里得算法等关键步骤的讲解,展示了RSA算法的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

密码设计课写过的RSA算法

代码写的丑,有学这门课需要的道友可以看一下

  1. main函数

#include<iostream>
#include<math.h>
#include"ProRPN.h"
#include<cstdlib>
#include"ProRPN.h"
using namespace std;
int main(void) {
	unsigned __int64 *pa, *qa, *pb,  *qb;
	pa = new(unsigned __int64);
	qa = new(unsigned __int64);
	pb = new(unsigned __int64);
	qb = new(unsigned __int64);
	*pa = *qa = *pb = *qb = 0;
	RSA A;
	RSA B;
	B.pute(41);
	productrpn(pa, qa, pb, qb);
	A.putp(pa);
	A.putq(qa);
	B.putp(pb);
	B.putq(qb);
	A.putpq();
	B.putpq();
	A.putd(rsa(A.getp(), A.getq(), A.gete()));
	B.putd(rsa(B.getp(), B.getq(), B.gete()));
	A.prits();
	A.pritsha();
	A.puts();
	ERSA(A.getd(), B.gete(),A.gets(), A.getsha(), A.getpq(), B.getpq());
	DRSA(A.gete(), B.getd(), A.getpq(), B.getpq());
	return 0;
}

  1. 处理函数头文件
#pragma once
#include<iostream>
using namespace std;
unsigned __int64 quick(unsigned  __int64 a, unsigned  __int64 b, unsigned __int64 c);//快速模平方算法
unsigned __int64  Rpn(unsigned  __int64 n, unsigned  __int64 m);//Random prime number 随机素数
bool Miller_Rabin(unsigned __int64  n,int z);//素性检测
bool proRPN(unsigned __int64 x, unsigned __int64  y);
void productrpn(unsigned __int64 *pa, unsigned __int64 *qa, unsigned __int64 *pb, unsigned __int64 *qb);
bool trydiv(unsigned __int64 x,unsigned __int64* y);
unsigned __int64 rsa(unsigned __int64 p, unsigned __int64 q, unsigned __int64 e);//辗转相除求私钥d
void ERSA(unsigned __int64 da, unsigned __int64 eb, char* s1, unsigned __int64* sha1, unsigned __int64 pqA, unsigned __int64 pqB);//加密函数
void DRSA(unsigned __int64 ea, unsigned __int64 db, unsigned __int64 pqA, unsigned __int64 pqB);//解密函数
class RSA {
private:
	unsigned __int64 p, q;//p,q为两个大素数
	unsigned __int64 pq;//两个大素数的乘积
	unsigned __int64 e;//公钥
	unsigned __int64 d;//私钥
	char s[100];//消息
	unsigned __int64 sha[40];//消息的摘要值,这里为随意写的160bit值
public:
	RSA() {//将题目中要求的数据放入构造函数
		e = 17;
		s[0] = '3'; s[1] = '2'; s[2] = '6'; s[3] = '5'; s[4] = '5';
		unsigned __int64 x[40] = { 0xa,0x9,0x9,0x9,0x3,0xe,0x
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值