身份证信息rsa加密算法以实现Word格式文档下载.docx
《身份证信息rsa加密算法以实现Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《身份证信息rsa加密算法以实现Word格式文档下载.docx(9页珍藏版)》请在冰点文库上搜索。
通过国家计算机网络应急技术处理协调中心统计显示,我国政府网络被黑客入侵逐年递增,维护好电子政务系统的安全、办公过程中信息传递的安全,防止被一些怀有不良居心的人抄袭或破坏,因此就需要安全措施来保护相应的信息及数据不被窃取或篡改,而采取对数据直接解密的方式即方便又安全,是保护信息安全的有效手段。
本研究课题,完成相应的系统,用户间可进行安全的文件、图片的收发。
所有的交互身份信息都经过加密和签名处理,通过验证签名机制可验证是否被恶意篡改,传输者将明文进行加密后的密文进行存储和传输,授权的接收者用本系统进行解密恢复明文,而XX的截获者将无法对明文可见,从而保证了身份信息的安全性。
而图片则通过特有的bmp格式图片进行信息隐藏。
一、数据安全的研究方向
系统中的数据安全主要体现在存储和传输两个方面,数据主要涉及的有身份信息,对于身份信息我们采取加密方式将明文转化成密文存储和传输,在传输的过程中防止被恶意篡改我们加入了验证。
(二)身份信息的加密、解密
计算机密码学以加密方式分组密码和序列密码,以密钥管理的方式可以划分为公开密钥算法和传统密钥算法。
RSA是当前最著名的,应用最广泛的非对称加密算法,原始的对称加密方法的速度虽然快于RSA加密算法,但其的抗攻击性远远弱于RSA加密算法;
RSA的安全性是基于大整数分解的困难性。
RSA算法的安全级别的提高依赖于素数的增大和公钥位数的提高。
随着分解大整数方法的进步及完善,计算机的速度的提高以及计算机网络的发展,作为RSA加解密的安全保障的大整数必然越来越大。
它的理论基础是一种特殊的可逆模幂运算,其安全性是基于大整数的因数分解的困难性。
为产生两个密钥,选取两个大的素数p和q。
为了获得最大程度的安全性,这两个数的长度应一样。
计算乘积
n=p*q
然后随机地选取加密密钥e,使得e与(p-1)(q-1)互素,最后用扩展的欧几里得算法计算解密密钥d,满足
ed=l(mod(p-1)(q-1))
则
d=1/e*mod(p-1)(q-1)
这里d与n也互素。
将e和n作为公开密钥,d作为私人密钥。
设需要加密的消息为m。
将其费城长度小于n数据分组mi(i=1,2,…),记加密后的密文为c,将由相同长度的分组ci组成,加密公式为:
ci=min(modn)
解密消息为
mi=cid(modn)
上面的关系验证为:
cid=mied=mimod(p-1)(q-1)+1=mi*mi(p-1)(q-1)=mi*1=mi(modn)
因为RSA的安全性是建立在数论中大整数因子分解的困难性上,所以随着大整数分解算法和计算能力的不断提高,对RSA的破译能力也在增强,p和q的位数越小,越易破译,因此而增强的RSA密钥长度使得加密速度慢,且运算复杂,所以如何提高这些高精度乘除运算的速度是RSA体制实用化的关键问题。
对身份信息的加密方法采用的是非对称密码算法——RSA加密算法。
会话密钥即对文件加密的密钥,对会话密钥的加密采用RSA加密算法。
对于会话密钥由于在对文件的加密时需要使用,所以对于会话密钥的加密是放在加密函数中进行的,用函数RSAEncrypt进行加密操作。
基于RSA加密算法的公私钥产生器。
使得用户可以自己生成公私密钥用来更新旧的公私密钥,省去了重新由第三方机构配置密钥带来的麻烦。
生成公私密钥对的难点在于寻找大素数。
二身份信息加解密及验证系统方案及实现
(一)文件的加密
1.身份信息的加密的方案
首先我们要生成公私密钥对,接收方将密钥对中的公钥发送给发送方,发送方提取公钥,对身份信息进行加密。
导出RSA参数,并导出公钥.此系统使用的是64位加密算法。
RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();
byte[]cipherbytes;
rsa.FromXmlString(publickey);
cipherbytes=rsa.Encrypt(Encoding.UTF8.GetBytes(str),false);
returnConvert.ToBase64String(cipherbytes);
2.身份信息的加密的实现
输入文本框想要传输的文本,点击加密,会形成对应的RSA结果,然后传输方将得到的RSA结果传输给数据库。
(二)文件的解密及传输验证的正确性
1.身份信息解密以及传输验证的方案
rsa.FromXmlString(privatekey);
cipherbytes=rsa.Decrypt(Convert.FromBase64String(str),false);
returnEncoding.UTF8.GetString(cipherbytes)。
签名和验证采用RSA算法实现,用RSA签名和验证文件。
发送方使用私钥对身份信息数据进行加密处理,生成一段数字字符串,并附着在原文上一起发送。
数字签名信息类似于现实中的签名或印章。
接收方使用发送方的公私钥密钥对数字签名进行验证来判断原文的真伪性。
保证信息是由授权发送方签名发送的,具有不可抵赖性。
并且能够保证身份信息数据从发送到接收的过程中未被任何修改,以确保身份信息的完整性与安全性。
2.身份信息解密以及传输验证的实现
接收方将接收的字符输入文本框,在公钥输入文本框将传输方的公钥字符串输入,然后利用接收方的私钥与传输方的公钥计算公私密钥对的私钥,然后点击解密。
(三)公私密钥对
在对身份信息加解密前首先要形成一个公私密钥对。
当参数显示为false的时候仅仅输出公钥;
当参数显示为true的时候公钥和密钥全部生成,但我们只得到一个私钥字符串。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingRDSystem.ItemClass;
usingSystem.Security.Cryptography;
usingSystem.Text;
usingSystem.Data;
namespaceWebApplication1
{
publicpartialclassWebUserControl1:
System.Web.UI.UserControl
{
protectedvoidPage_Load(objectsender,EventArgse)
}
stringpublickey="
<
RSAKeyValue>
Modulus>
5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=<
/Modulus>
Exponent>
AQAB<
/Exponent>
P>
/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==<
/P>
Q>
6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==<
/Q>
DP>
ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==<
/DP>
DQ>
MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==<
/DQ>
InverseQ>
EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==<
/InverseQ>
D>
vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=<
/D>
/RSAKeyValue>
"
;
stringprivatekey="
SqlBaseClassG_SqlExecute=newSqlBaseClass();
protectedvoidButton1_Click(objectsender,EventArgse)
stringkey=JiaMi(TextBox1.Text,publickey);
string检测="
select*fromdbo.[user]"
DataSetds=G_SqlExecute.GetDs(检测);
for(inti=0;
i<
ds.Tables[0].Rows.Count;
i++)
ds.Tables[0].Rows[i]["
idno"
]=JieMi(ds.Tables[0].Rows[i]["
].ToString(),publickey);
DataRow[]dr=ds.Tables[0].Select("
idno="
+TextBox1.Text+"
);
if(dr.Length>
0)
Label1.Text="
有效账号,姓名为:
"
+dr[0][1].ToString();
Session["
noid"
]=JiaMi(TextBox1.Text,privatekey);
else
无效"
///<
summary>
///md5效验
/summary>
paramname="
ConvertString"
>
传入需要效验的字符串,返回MD5效验结果<
/param>
returns>
/returns>
publicstaticstringGetStrMd5(stringConvertString)
//实例化MD5.使用加密服务提供程序(CSP)提供的实现,计算输入数据的MD5哈希值
MD5CryptoServiceProvidermd5=newMD5CryptoServiceProvider();
stringt2=BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)));
t2=t2.Replace("
-"
"
returnt2;
///加密
str"
需要加密的字符串<
publickey"
传入公钥<
publicstaticStringJiaMi(Stringstr,Stringpublickey)
//使用加密服务提供程序(CSP)提供的RSA算法的实现执行不对称加密和解密。
RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();
byte[]cipherbytes;
rsa.FromXmlString(publickey);
cipherbytes=rsa.Encrypt(Encoding.UTF8.GetBytes(str),false);
returnConvert.ToBase64String(cipherbytes);
///解密
privatekey"
传入私钥<
publicstaticStringJieMi(Stringstr,Stringprivatekey)
cipherbytes=rsa.Decrypt(Convert.FromBase64String(str),false);
returnEncoding.UTF8.GetString(cipherbytes);
}
本系统源码下载地址
技术交流Q:
2431797625
技术问题和代码解释,请直接说出系统的名字和疑问,我上线时候会给你们解答,问在不在的就不回复了.