在ASP.NET中设计两个方面的加密和解密:一个是针对配置文件中配置节的加密和解密,另外一个是针对ASP.NET中数据的加密和解密。
在 .NET 中,加密和解密的技术可以分为两种。一种是加密和解密使用同样的密钥和算法,我们称之为密钥加密或者对称加密,这个方法的特点是非常快。另外一种加密方式为公钥加密或者成为非对称加密,这种加密算法对于加密和解密使用不同的密钥,通常有连个密钥A和B,使用密钥A加密数据得到密文,只有密钥B可以进行解码操作;而使用密钥B加密数据得到密文,只有密钥A可以解密。这两个密钥分别称为四要和公钥。非对称加密强度大,但是处理速度比较慢。
与此相关还有两个概念:数字签名和散列。公钥算法还可用于构成数字签名,用来验证信息发送方的身份(如果您信任发送方的密钥)并帮助保护数据的完整性。散列算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值成为散列之。散列函数来确保消息的完整性。
在ASP.NET中的很多加密和解密都要依赖于密钥,密钥保存在配置文件的machineKey里面。默认情况下,ASP.NET通过动态生成来创建网站所使用的密钥,如果单台服务器当然没问题,但是如果网站采用多台服务器负载均衡,machineKey还采用动态生成的方式,那么,每台服务器上的machineKey的值不一致,会导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。
ASP.NET中,machineKey用于以下三种用途:
·使用 forms authentication时的cookie数据的加密和解密,以确保这部分数据不会被篡改。
·viewstate数据的加密和解密,以确保这部分数据不会被篡改。
·使用进程外session(out-of-process session)时,对话状态标识进行验证。
(具体参见MSDN:http://msdn.microsoft.com/zh-cn/library/w8h3skw9(v=vs.80).aspx)