Rsa加密算法的原理及在asp.net8.0中的应用

Rsa加密算法的原理及应用:

算法简介:

1.RSA算法是一种非对称加密算法,与对称加密算法不同的是,RSA算法有两个不同的密钥,一个是公钥,一个是私钥。 RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 。 2.在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK 。 正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要 。 3.RSA是被研究得最广泛的公钥算法,从提出后经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利 。 4.由于RSA算法1024位密钥面临严重的安全威胁,为保障电子认证服务安全应用,2016年12月5日,上海市密码管理局在其官方网站上发布公告,称从2017年1月1日起停止提供RSA算法1024位密钥对服务,并配合电子认证服务机构和应用单位做好应对措施,确保平稳过渡。

算法原理:

RSA算法的具体描述如下: (1)任意选取两个不同的大素数p和q计算乘积 n=p*q,φ(n)=(p-1)*(q-1); (2)任意选取一个大整数e,满足 1<e<φ(n),且gcd(e,φ(n))=1(即最大公约数为1).(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用) ; (3)确定的解密钥d,满足 ,(ed) mod φ(n)=1 即 ed=K* φ(n)+1,e 是一个任意的整数,与欧拉函数互质;所以,若知道e和,则很容易计算出d ; (4)公开整数n和e,秘密保存d 即(e,n)为公约,(d,n)为私钥; (5)将明文m(m<n是一个整数)加密成密文c,加密算法为 m ^(e) mod(n)=c (6)将密文c解密为明文m,解密算法为 c^(d) mod(n) =m. 然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 现举例为下,设p=3,q=7,则n=21, φ(n)=12,选取e=11,则11d=12K+1,K为正整数,则K=10,21,32....则用辗转相除法,可计算出d=11,23,35,选取公钥为(11,21),私钥为(23,21),若要加密的明文为5,则产生的密文为17, 17^23%21=5,完成解密

算法速度

由于RSA算法进行的都是大数指数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。有研究讲明,RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右.

用RSA签名

用RSA算法进行签名时,建议 1.求出要签名文档的哈希值; 2.对哈希值进行加密. 验签时 1.先解密哈希值 2.验证哈希值. 这样能大大提高签名速度.

使用RSA时的注意事项

1.公钥可以对外公开. 2.私钥严格保密,即使保存在本地,建议采用微软的方法,保存为证书,最好不要自己生成密钥 3.切记,私钥中含有公钥

要切记-------私钥中含有公钥 !!!

在asp.net 8.0中的应用

1.构造RSA服务
2.导出公钥和私钥,并存放在服务器

var rsa = RSA.Create();//建立
byte[] b=new byte[2048];
int i;
rsa.TryExportRSAPublicKey(b,out i);
String S=System.Convert.ToBase64String(b,0,i);

3.使用时,新建RSA服务,导入私钥,用私钥加密

 RSA rSA = RSA.Create();
 string s= _config.GetValue<string>("RSAPrivateKey");
 byte[] b=System.Convert.FromBase64String(s);
 int i;
 rSA.ImportRSAPrivateKey(b, out i);
 var okey = new RsaSecurityKey(rSA);
 byte[] data= { },data0;
data0=rsa.ENcrypt(data,RSAEncryptionPadding.OaepSHA3_512);

4.解密或验签时,新建RSA服务,导入公钥,用公钥验签.

var rsa = RSA.Create();//建立
b=new byte[2048];
S = builder.Configuration.GetValue<string>("RSAPublicKey");
var k0= Convert.FromBase64String(S);
rsa.ImportRSAPublicKey(k0, out  i);
//RsaSecurityKey key =new RsaSecurityKey(rsa);
byte[] data= { },data0;
data0=rsa.Decrypt(data,RSAEncryptionPadding.OaepSHA3_512);

5.签名

RSA rSA = RSA.Create();
string s= _config.GetValue<string>("RSAPrivateKey");
byte[] b=System.Convert.FromBase64String(s);
int i;
rSA.ImportRSAPrivateKey(b, out i);
var okey = new RsaSecurityKey(rSA);
SigningCredentials = new SigningCredentials(okey, SecurityAlgorithms.RsaSha512)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值