实验5:RSA现代非对称加密算法
【实验步骤及描述】
题目要求:
根据给定的RSA的公钥(N,e)=(33,3)和对应的私钥 d = 7
加密消息M = 19,并对消息M = 25实施数字签名计算
1.打开cryptool2软件
2.选择Templates 中的RSA Encryption
打开的界面如下
可以针对Source调整模式,选择Enter keys manually,并输入相应的信息
进行加密
按照道理没有出现操作的问题,但是软件仍然报错为
查阅网上相关资料了解到,可能是输入的明文M太大,超过了软件的规定要求。
换一种方式来讲是公钥的设置N过小导致软件报错
我们将N值调大
可以看到对于相同的明文,软件进行了加密
基于此,改用自己写代码的方式完成实验
3.使用VScode + C++实现RSA加密
编写的程序如下:
/*
信息安全实验5:RSA现代非对称加密算法
Alice的公钥为
(N , e) = (33,3)
加密 M = 19 求密文C
加密 M = 25 求数字签名的值S
*/
#include <cmath>
#include <iostream>
using namespace std;
void RSA(int N, int e, int d, int M, int mode)
{
uint64_t C, S;
if (mode == 1)
{
C = pow(M, e);
C = C % N;
cout << "公钥加密密文为:" << C << endl;
}
if (mode == 2)
{
S = pow(M, d);
S = S % N;
cout << "私钥数字签名为:" << S << endl;
}
}
int main(int argc, char const *argv[])
{
int mode;
//公钥和d
int N, e, d, M, C, S;
cout << "RSA加密算法实现加密和数字签名" << endl;
cout << "请输入公钥 N,e 空格分开" << endl;
cin >> N;
cin >> e;
cout << "请输入私钥d" << endl;
cin >> d;
cout << "请输入明文:" << endl;
cin >> M;
cout << "请选择方式:1.公钥加密 2.私钥数字签名" << endl;
cin >> mode;
cout << "正在加密中,请稍等。。。。。" << endl;
RSA(N, e, d, M, mode);
return 0;
}
实验结果应为
C = 28
S = 31
运行程序验证结果
【实验结果】
公钥加密M=19
私钥数字签名M=25