【字符加解密】RSA算法明文字符串加解密【含Matlab源码 3544期】

在这里插入图片描述

⛄一、RSA算法明文字符串加解密简介

1 RSA产生公私钥对
1.1 随机选择两个不相等的质数p和q。
(实际应用中,这两个质数越大,就越难破解。)
1.2 计算p和q的乘积n。
n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
1.3 计算n的欧拉函数φ(n)。称作Q
根据公式φ(n) = (p-1)(q-1)
1.4 随机选择一个整数e,也就是公钥当中用来加密的那个数字
条件是1< e < φ(n),且e与φ(n) 互质。
1.5 计算e对于φ(n)的模反元素d。也就是密钥当中用来解密的那个数字
所谓"模反元素"就是指有一个整数d,可以使得ed被φ(n)除的余数为1。ed = 1 (mod φ(n))
1.6 将n和e封装成公钥,n和d封装成私钥。

2 RSA加密
首先对明文进行比特串分组,使得每个分组对应的十进制数小于n,然后依次对每个分组m做一次加密,所有分组的密文构成的序列就是原始消息的加密结果,即m满足0<=m<n,则加密算法为:
c= m^e mod n; c为密文,且0<=c<n。

3 RSA解密
对于密文0<=c<n,解密算法为:
m= c^d mod n;

⛄二、部分源代码

%%RSA算法加解密过程
%%key1代表明文字符串,key代表分割后的字符串
%1.明文有多个数据时,采用数组方式分组写入数据[20,19];
%2.如果明文含字母,换成ASCII的十进制数算
%3.字母–>ASCII:abs(‘a’),ASCII–>字母:char(97),多个char([97,98])
key1=‘Hello01’;
disp(‘输入的明文字符串为:’);
disp(key1);
length_key1=length(key1);%求字符串长度
key=[];%用于放置分割后的明文
m=1;
j=1;
%分割明文,一个一个的分割
for i=1:j:length_key1
str1=str2double(key1(i));
if isnan(str1) %是否是无效字符
key(m)=abs(key1(i));
else
key(m)=str2double(key1(i));
end
m=m+1;
end
%rsa_pq函数用于随机获取p,q,n,Q,e,d;也可自定义
[p,q,n,Q,e,d]=rsa_pq();
%rsa_encrypt函数用于实现RSA加密过程,输出的rsa1为密文
rsa1=rsa_encrypt(key,e,n);
%rsa_encrodet函数用于实现RSA解密过程,输出的rsa2为明文
rsa2=rsa_encode(rsa1,d,n);
%把rsa2明文转回字符串
length_rsa2=length(rsa2);
mingwen=‘’;
for i=1:1:length_rsa2
if rsa2(i)>=65&&rsa2(i)<=90%判断是否是大写字母
mingwen=[mingwen,char(rsa2(i))];%拼接字符串
elseif rsa2(i)>=97&&rsa2(i)<=122%判断是否是小写字母
mingwen=[mingwen,char(rsa2(i))];
else
mingwen=[mingwen,num2str(rsa2(i))];
end
end
disp(‘解密出的明文字符串为:’);
disp(mingwen);

⛄三、运行结果

在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]李文亮.RSA算法原理及实现[D].计算机科学. 2003,(12)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值