首页>>科技 >>内容

rsa加密和解密过程,rsa加密与解密过程解析

发布时间:2023-10-02 16:29:42编辑:温柔的背包来源:

rsa加密和解密过程,rsa加密与解密过程解析

很多朋友对rsa加密和解密过程,rsa加密与解密过程解析不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

RSA算法RSA公钥密码系统。所谓公钥密码体制,就是使用不同的加密密钥和解密密钥,是一种“从已知的加密密钥推导出解密密钥在计算上是不可行的”的密码体制。

在公钥密码系统中,加密密钥PK是公开信息,而解密密钥SK需要保密。还公开了加密算法e和解密算法d。虽然解密密钥SK是由公钥PK决定的,但不能从PK计算出来。

基于这个理论,1978年出现了著名的RSA算法。一般是老师用的一对RSA密钥,其中一个是秘钥,由用户保管。另一种是公钥,可以公开,甚至可以在网络服务器上注册。为了提高安全强度,RSA密钥至少要有500位长,一般推荐1024位。这使得加密的计算量非常大。

为了减少计算量,在传输信息时,传统的加密方法往往与公钥加密方法相结合,即用改进的DES或IDEA对话密钥对信息进行加密,然后用RSA密钥对对话密钥和消息摘要进行加密。对方收到消息后,用不同的密钥解密,可以查看消息摘要。

RSA算法是第一个既能用于加密又能用于数字签名的算法,也很容易理解和操作。RSA是研究最广泛的公钥算法。在过去的30年里,它经受了各种攻击的考验,逐渐被人们所接受。到2017年,它被普遍认为是最好的公钥方案之一。加密过程:A提取消息M的消息摘要h(m),用自己的私钥加密摘要h(m)生成签名s。

a用B的公钥加密签名S和消息M,生成密文C并将其发送给B.解密过程:B接收密文C,用自己的私钥解密C得到明文M,数字签名sB用A的公钥解密数字签名S得到H(m)。使用相同的方法提取消息摘要h(m)。如果相同,则验证成功;如果不同,则验证失败。RSA加密过程简介

当A和B进行加密通信时,B必须首先生成一对密钥。一个是公钥,给A和B各自的私钥。a用B的公钥加密要发送的内容,然后B用自己的私钥解密内容。数字签名的作用是保证数据的完整性、保密性和发送者不可否认的作用。

假设A要给B发送一条消息,A会先计算出该消息的消息摘要,然后用自己的私钥对这个摘要进行加密,最后将加密后的消息摘要和消息一起发送给B。加密的消息摘要是一个“签名”。

B收到消息后也会用和A一样的方法提取消息摘要,然后用A的公钥解密A发来的消息进行签名,并和自己计算的消息摘要进行比较。如果相同,说明消息是A发给B的,同时,A也不能否认他给B发消息的事实.其中,A用自己的私钥加密消息摘要成为“签名”;B用A的公钥解密签名文件的过程称为“签名验证”。RSA加解密代码//《summary》///RSA公钥加密

///《/summary》 ///《param name=“content”》 要加密的内容《/param》 ///《param name=“publickey”》 公钥《/param》///《returns》 《/returns》公共静态字符串EncryptByPublicKey(字符串内容,字符串公钥){ byte[]s=Convert .来自base 64字符串(公钥);asymmetrickey参数公钥=公钥工厂.创建密钥;IBufferedCipher c=密码实用程序get cipher("RSA/ECB/pkcspadding");//公钥加密c.Init(真,公钥);

Byte[] byteData=encoding. UTF8.GetBytes (content); byteData=c.DoFinal(byteData,0,byteData。 Length); Return to the transformation. tobase 64 string(byte data); }//}///《summary》 ///RSA Encryption//《/summary》//《param name=“content”》 Encrypted plaintext 《/param》//《param name=“privatekey”》 Private key 《/param》//0755-.

asymmetrickey参数私钥=私钥工厂.创建密钥(转换从base 64 string(私钥));IBufferedCipher c=密码实用程序get cipher("RSA/ECB/pkcspadding");//私钥加密c.Init(真,私钥);字节[]字节数据=编码10 . UTF8。GetBytes(内容);byteData=c.DoFinal(byteData,0,byteData .长度);返回转换tobase 64字符串(字节数据);}///《returns》 ///RSA解密///《/returns》 ///《summary》 密文《/summary》

///《param name=“content”》 私钥《/param》 ///《param name=“privatekey”》 明文《/param》公共静态字符串RSADeEncry(字符串内容,字符串私钥){ try {内存流缓冲流=新内存流();字节[]字节数据=转换FromBase64String(内容);int inputLength=字节数据.长度;asymmetrickey参数私钥=私钥工厂.创建密钥(转换从base 64 string(私钥));IBufferedCipher密码=密码实用程序get cipher("RSA/ECB/pkcspadding");

密码. Init(false,私钥);int offSet=0;字节[]缓存;int I=0;while(输入长度-偏移量"0){ if(输入长度-偏移量"128){ cache=cipher .DoFinal(bytData,offSet,128);}else{cache=密码. DoFinal(bytData,offSet,输入长度-偏移量);}bufferStream .写(缓存,0,缓存。长度);我;offSet=I * 128 } byte[]解密数据=缓冲流.to array();缓冲流.close();

返回编码10 . UTF8。GetString(bufferStream .ToArray());}catch(异常e){返回e .消息;}}

以上知识分享希望能够帮助到大家!