C# 常用散列算法与加解密算法使用-加密算法

作者:vkvi 来源:ITPOW(原创) 日期:2012-6-30

在应用系统开发中,安全涉及的机密性、完整性、身份认证都需要散列算法或加解密算法的参与,C# 提供了常用的散列算法和加解密算法类,利用这些类,我们可以方便地实现所需功能。

对称加密

对称加密只有一套密钥,加密和解密均使用该密钥,该密钥决定了密文的安全与否,所以一定要保存好该密钥。对称加密的特点是速度快,能对大容量数据进入加密解密。

本文介绍的 TripleDES 是对 DES 的加强,使用的类是 TripleDESCryptoServiceProvider,其命名空间是 System.Security.Cryptography。

我们可以看到加密后的 byte 数组,和散列算法不同,这次是通过转换为 Base64 格式的字符串,主要是还有个解密的过程,用 Base64 的话,解密过程中可以更方便地转换回 byte 数组。

另外,我们会发现,没有密钥!的确,这里是随机产生的。下面看看如何指定密钥进行加密、解密。

指定密钥是在 tripleDES.CreateEncryptor 和 tripleDES. CreateDecryptor 中指定的,而解密的代码是加密的一个反向的过程。要注意:明文与 byte 数组之间的转换用的是 Encoding.UTF8.GetBytes、Encoding.UTF8.GetString(也可以是其他编码);密文与 byte 数组之间的转换用的是 Convert.ToBase64String、Convert.FromBase64String;密钥用 Base64 存储。

不对称加密

不对称加密有两套密钥,一套为公钥可以公开,一套为私钥需要保密。不对称加密速度慢,且无法对大容量的数据进入加密解密,但它可以对外公开公钥,保存一个别人不知道的私钥。常用的不对称加密算法是 RSA。

可使用 RSACryptoServiceProvider 进行 RSA 加密、解密,该类的命名空间是 System.Security.Cryptography。

不对称加密的密钥并不是随便输一串字符就可以当作密钥的,它是经过严格的算法产生的,如上没有指定,那么就使用自动产生的密钥。

如果要获取这个密钥,怎么办呢?使用 rsa.ToXmlString(false),参数 false 表示不要把私钥输出来。下面用实例演示一下使用特定的密钥进行加密、解密。

上述密钥是含有私钥的,实际应用中,如果我们希望公众发来的数据是加密的,那么我们公开公钥,公众只需要用公钥进行加密,然后接收方再用私钥进行解密。

不对称加密常常和对称加密组合使用:对称加密对大内容进行加密,不对称加密再把对称加密的密钥进行加密,这样组合起来就达到了安全传输大内容的效果。

相关文章