现在的位置: 首页 > 综合 > 正文

数据安全--加密与解密(一)

2013年10月01日 ⁄ 综合 ⁄ 共 2229字 ⁄ 字号 评论关闭

                                                      数据安全--加密与解密基础(一)

                                                                                                   2004.11 

       去年,MD5算法被一个中国女性破解,搞得人心惶惶,数字签名似乎都没有保障了?数据的安全性一直并且将日益重要 ,任何一个从事程序开发的人员都有必要了解数据安全的基本知识,因为一不小心你就会用到,比如,在配置文件中存放数据库的密码,难道你是以明文的形式存储的吗?千万不要这么做!在这个专题中将介绍数据安全的基础知识以及在C#中的运用。本文先简单地介绍加密的基础知识。

1.加密用于达到以下目的:
保密性:防止用户的标识或数据被读取。
数据完整性:防止数据被更改。
身份验证:确保数据发自特定的一方。

2.加密种类
(1)私钥加密算法:
        使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保护密钥不被未经授权的代理得到。
        私钥加密又称为对称加密,因为同一密钥既用于加密又用于解密。私钥加密算法非常快(与公钥算法相比),特别适用于对较大的数   据流执行加密转换。它使用一个密钥和一个初始化向量 (IV) 对数据执行加密转换。
 
(2)公钥加密:使用一个必须对未经授权的用户保密的私钥和一个可以对任何人公开的公钥。公钥和私钥都在数学上相关联;用公钥加密的数   据只能用私钥解密,而用私钥签名的数据只能用公钥验证。公钥可以被任何人使用;该密钥用于加密要发送到私钥持有者的数据。两   个密钥对于通信会话都是唯一的。公钥加密算法也称为不对称算法,原因是需要用一个密钥加密数据而需要用另一个密钥来解密数据。
   公钥算法非常缓慢(与私钥算法相比),不适合用来加密大量数据。公钥算法仅对传输很少量的数据有用。公钥加密通常用于加密一个私钥算法将要使用的密钥和 IV。传输密钥和 IV 后,会话的其余部分将使用私钥加密。
  
(3)数字签名:公钥算法还可用于构成数字签名。数字签名验证发送方的标识(如果您信任发送方的公钥)并保护数据的完整性。比如,使用由小 红生成的公钥,小红的数据的接收者可以通过将数字签名与小红的数据和小红的公钥进行比较来验证是否是小红发送了该数据。为了使用公钥加密对消息进行数字签名,小红首先将哈希算法应用于该消息以创建消息摘要。该消息摘要是数据的紧凑且唯一的表示形式。然后,小红用她的私钥加密该消息摘要以创建她的个人签名。在收到该消息和签名时,小明使用小红的公钥解密签名以恢复该消息摘 要,并使用与小红所使用的相同的哈希算法来散列该消息。如果小明计算的消息摘要与从小红那里收到的消息摘要完全一致,小明就可以确定该消息来自私钥的持有人,并且数据未被修改过。如果小明相信小红是私钥的持有人,则他知道该消息来自小红。
  
(4)哈希值
   哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的。
   消息身份验证代码 (MAC) 哈希函数通常与数字签名一起用于对数据进行签名,而消息检测代码 (MDC) 哈希函数则用于数据完整性。
   小红和小明可按下面的方式使用哈希函数以确保数据完整性。如果小红对小明编写一条消息并创建该消息的哈希,则小明可以在稍后 散列该消息并将他的哈希与原始哈希进行比较。如果两个哈希值相同,则该消息没有被更改;但是,如果值不相同,则该消息在小红编写它之后已被更改。为了使此系统运行,小红必须对除小明外的所有人保密原始的哈希值。

3..Net平台对数据安全的基础支持:(关于更高级的应用将在下一篇文章中介绍)

(1)生成对称密钥:
TripleDESCryptoServiceProvider TDES = new TripleDESCryptoServiceProvider();
TDES.GenerateIV();
TDES.GenerateKey();

(2)生成不对称密钥:
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(false);

将不对称密钥存储在密钥容器中
CspParameters cp = new CspParameters();
cp.KeyContainerName = ContainerName;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);

//得到保存的
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
rsa.ToXmlString(true) ;

//删除保存的密钥
rsa.PersistKeyInCsp = false;
rsa.Clear();

抱歉!评论已关闭.