rsa算法
rsa公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)pk是公开信息,而解密密钥(即秘密密钥)sk是需要保密的。加密算法e和解密算法d也都是公开的。虽然解密密钥sk是由公开密钥pk决定的,但却不能根据pk计算出sk。
正是基于这种理论,1978年出现了著名的rsa算法,它通常是先生成一对rsa 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,rsa密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的des或idea对话密钥加密,然后使用rsa密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
rsa算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。rsa是被研究得最广泛的公钥算法,从提出到现今的三十多年里,经历了各种攻击的考验,逐渐为人们接受,截止2017年被普遍认为是最优秀的公钥方案之一。
加密过程:
a提取消息m的消息摘要h(m),并使用自己的私钥对摘要h(m)进行加密,生成签名s
a将签名s和消息m一起,使用b的公钥进行加密,生成密文c,发送给b。
解密过程:
b接收到密文c,使用自己的私钥解密c得到明文m和数字签名s
b使用a的公钥解密数字签名s解密得到h(m)。
b使用相同的方法提取消息m的消息摘要h(m)
b比较两个消息摘要。相同则验证成功;不同则验证失败。
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》
public static string encryptbypublickey(string content, string publickey)
{
byte[] s = convert.frombase64string(publickey);
asymmetrickeyparameter publickey = publickeyfactory.createkey(s);
ibufferedcipher c = cipherutilities.getcipher(“rsa/ecb/pkcs1padding”);
//公钥加密
c.init(true, publickey);
byte[] bytedata = encoding.utf8.getbytes(content);
bytedata = c.dofinal(bytedata, 0, bytedata.length);
return convert.tobase64string(bytedata);
}
/// 《summary》
/// rsa加密
/// 《/summary》
/// 《param name=“content”》加密明文《/param》
/// 《param name=“privatekey”》私钥《/param》
/// 《returns》返回密文《/returns》
public static string rsaencry(string content, string privatekey)
{
asymmetrickeyparameter privatekey = privatekeyfactory.createkey(convert.frombase64string(privatekey));
ibufferedcipher c = cipherutilities.getcipher(“rsa/ecb/pkcs1padding”);
//私钥加密
c.init(true, privatekey);
byte[] bytedata = encoding.utf8.getbytes(content);
bytedata = c.dofinal(bytedata, 0, bytedata.length);
return convert.tobase64string(bytedata);
}
/// 《summary》
/// rsa解密
/// 《/summary》
/// 《param name=“content”》密文《/param》
/// 《param name=“privatekey”》私钥《/param》
/// 《returns》明文《/returns》
public static string rsadeencry(string content, string privatekey)
{
try
{
memorystream bufferstream = new memorystream();
byte[] bytdata = convert.frombase64string(content);
int inputlength = bytdata.length;
asymmetrickeyparameter privatekey = privatekeyfactory.createkey(convert.frombase64string(privatekey));
ibufferedcipher cipher = cipherutilities.getcipher(“rsa/ecb/pkcs1padding”);
cipher.init(false, privatekey);
int offset = 0;
byte[] cache;
int i = 0;
while (inputlength - offset 》 0)
{
if (inputlength - offset 》 128)
{
cache = cipher.dofinal(bytdata, offset, 128);
}
else
{
cache = cipher.dofinal(bytdata, offset, inputlength - offset);
}
bufferstream.write(cache, 0, cache.length);
i++;
offset = i * 128;
}
byte[] decrypteddata = bufferstream.toarray();
bufferstream.close();
return encoding.utf8.getstring(bufferstream.toarray());
}
catch (exception e)
{
return e.message;
}
}
SBC ceRNA芯片简介
母线的PEEC模型
港媒:英伟达再为中国推3款“改良”芯片?最快11月16日之后公布
太阳能光伏层压机原理及未来应用发展趋势
关于高性能电介质储能研究最新进展一览
rsa加密与解密过程解析
告诉你建设5G太难了,需要翻越三座大山!
百度研究院召开大会 发现了窥视人工智能的新视角
LG Uplus发布两款智能家居产品
选择性焊接PCB技术你有没有掌握
本田汽车将于通用汽车打造全新纯电动车型
三翼鸟厨房亮相中国智慧家庭大会,连获4奖
蔚来汽车的固态电池概念只是一个营销噱头?
兴森科技联合浪潮信息,为智能制造插上“数据”翅膀
2021年中国LED显示屏产业在一片“涨声”中迎来开局
多要素气象环境自动观测站HM-QC16的功能特点说明
大华股份与包头市石拐区共推数字城市建设
激光技术在斤斤计较的汽车制造中赋能,以汽车轻量化为重点
新唐科技NCT7802Y芯片简介
STM32的串口通信原理介绍