C# 加密算法[汇总]
【散列类型】 不可逆,严格说不算加密算法,是一种保证数据完整性的算法或数字签名.
【对称类型】使用相同的密钥进行数据的加密和解密.
3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高, 因此,DES使用8B的加密向量和密钥,3DES使用24B的加密向量和密钥.
【非对称类型】 使用不同的密钥进行加密和解密.
非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个必需配对使用,否则不能打开加密文件。这里的“公钥”是指可以对外公布的,“私钥”则不能,只能由持有人一个人知道。它的优越性就在这里,因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃取。而非对称式的加密方法有两个密钥,且其中的“公钥”是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。
在不对称加密中,如果使用一个公钥进行加密,就应该使用对应的私钥进行解密,如果使用私钥加密,就应该使用对应的公钥进行解密.
例如:A给B发一份邮件,A希望除了B以外其他人都不能阅读改邮件,所以使用B的公钥加密,这样B打开邮件并用他的私钥解密,这种方式可以保证除了B以外其他人无法阅读改邮件.还有一个问题是,除了A以外还有C,D,E都可以给B发送邮件,这样就必须先解决一个问题,就是要确定发送者,而且关键是要避免发送方的签名被人盗用.
这时可以使用发送方的私钥对一个固定的字符串进行加密,让后接收方通过使用发送方的公钥进行检验,确定其真实性,这样A发送的邮件确保只有B能阅读,而B接收的邮件也确定是A发送的.
[注1]Cng前缀或后缀的类支持的平台:Windows 7, Windows Vista SP1 或更高版本, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心)
[注2]在Cng的加密过程中,不要使用Encoding类将加密的字节数组转换为字符串在进行解密,Encoding类验证和转换Unicode不允许使用的无效值,转为字符串再解密可能变为不一样的结果.
[注3]在网络通信中,经常是先使用非对称的密钥进行互换,然后再使用对称密钥加密在线上发送的数据.
ECDiffieHellman算法用于密钥的互换,从而进行安全传送.
在ECDiffieHellman实例中,使用发送方的私钥以及接收方的公钥生成的字节数组作为对称加密的密钥,对发送的内容进行加密,而接收方可以使用自己的私钥以及发送方的公钥也生成一个相同的密钥,对发送的内容进行解密.这就避免了对称加密的密钥传输过程.当然在此之前必须还要判断发送方以确定其公钥。这种情况可以先用发送方的的私钥加密生成一个签名,然后接收方使用发送方公钥进行验证,这样就可以确定发送方了。
[注4]完整的密钥互换和安全传送:A给B发送邮件.
1. A使用ECDsa算法先对一个字符串常量使用A的私钥进行加密,生成一个签名用于确定发送方的真实性.
2. A使用ECDiffieHellman算法,用A私钥和B的公钥生成一个密钥.
3. A使用生成的密钥对发送的内容进行加密.
4.B使用ECDsa算法对A的签名进行验证,确定是A发送的.
5.B使用 使用ECDiffieHellman算法,用B私钥和A的公钥生成一个密钥.
6.B 使用生成的密钥对发送的内容进行解密.