3.对称可逆加密对称可逆加密就是用密钥将需要加密的内容进行加密,然后将加密后的内容发送给接收方,接收方街道内容后利用相同的密钥进行解密后就拿到了明文 。对称可逆加密方式有一个严重的问题就是要保证密钥的安全,一旦密钥泄密第三方就可以利用这个密钥对解密收到的密文,甚至可以利用密钥伪造信息发送给接收方,接收方也就无法分辨出到底是谁发送的密文 。
最常用的对称可逆加密算法是 DES ,下面我们通过代码看一下 DES 的实现:
public class DES{/// <summary>/// 密钥/// </summary>private byte key = ASCIIEncoding.ASCII.GetBytes("123456");/// <summary>/// 偏移量/// </summary>private byte iv = ASCIIEncoding.ASCII.GetBytes("123456".Insert(0, "w").Substring(0, 8));/// <summary>/// 加密/// </summary>/// <param name="text">需要加密的值</param>/// <returns>加密后的结果</returns>public string Encrypt(string text){DESCryptoServiceProvider dsp = new DESCryptoServiceProvider;using (MemoryStream memStream = new MemoryStream){CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateEncryptor(key, iv), CryptoStreamMode.Write);StreamWriter sWriter = new StreamWriter(crypStream);sWriter.Write(text);sWriter.Flush;crypStream.FlushFinalBlock;memStream.Flush;return Convert.ToBase64String(memStream.GetBuffer, 0, (int)memStream.Length);}}/// <summary>/// 解密/// </summary>/// <param name="encryptText"></param>/// <returns>解密后的结果</returns>public string Decrypt(string encryptText){DESCryptoServiceProvider dsp = new DESCryptoServiceProvider;byte buffer = Convert.FromBase64String(encryptText);using (MemoryStream memStream = new MemoryStream){CryptoStream crypStream = new CryptoStream(memStream, dsp.CreateDecryptor(key, iv), CryptoStreamMode.Write);crypStream.Write(buffer, 0, buffer.Length);crypStream.FlushFinalBlock;return ASCIIEncoding.UTF8.GetString(memStream.ToArray);}}}
4.非对称可逆加密非对称加密比较麻烦,发送方和接收方都保存有两个密钥,其中一个密钥是公钥,公钥是对外公开的,任何人都可以拿到,另一个是私钥,每个人的私钥不一样 。规则是由A公钥加密的信息只能用A的私钥解密,由A的私钥加密的消息只能由A的公钥解密 。
非对称可逆加密的模式由两种:
- 加密模式
使用接收方的公钥加密,然后使用接收方的私钥解密,这样可以保证只有特定的接收方能收到信息,但是无法确认发送方是谁 。
- 认证模式
使用发送方的私钥加密,然后使用发送方的公钥解密,这样可以保证特定发送方发送消息,但是无法确定消息是发给了谁 。
常用的非对称可逆加密算法常用的是RSA,代码实现如下:
public class Rsa{/// <summary>/// 获取加密/解密对/// </summary>/// <returns>Encrypt Decrypt</returns>public static KeyValuePair<string, string> GetKeyPair{RSACryptoServiceProvider RSA = new RSACryptoServiceProvider;string publicKey = RSA.ToXmlString(false);string privateKey = RSA.ToXmlString(true);return new KeyValuePair<string, string>(publicKey, privateKey);}/// <summary>/// 加密/// </summary>/// <param name="content"></param>/// <param name="encryptKey">加密key</param>/// <returns></returns>public static string Encrypt(string content, string encryptKey){RSACryptoServiceProvider rsa = new RSACryptoServiceProvider;rsa.FromXmlString(encryptKey);UnicodeEncoding ByteConverter = new UnicodeEncoding;byte DataToEncrypt = ByteConverter.GetBytes(content);byte resultBytes = rsa.Encrypt(DataToEncrypt, false);return Convert.ToBase64String(resultBytes);}/// <summary>/// 解密/// </summary>/// <param name="content"></param>/// <param name="decryptKey">解密key</param>/// <returns></returns>public static string Decrypt(string content, string decryptKey){byte dataToDecrypt = Convert.FromBase64String(content);RSACryptoServiceProvider RSA = new RSACryptoServiceProvider;RSA.FromXmlString(decryptKey);byte resultBytes = RSA.Decrypt(dataToDecrypt, false);UnicodeEncoding ByteConverter = new UnicodeEncoding;return ByteConverter.GetString(resultBytes);}/// <summary>/// 产生一组新的密钥/// </summary>/// <param name="content"></param>/// <param name="encryptKey">加密key</param>/// <param name="decryptKey">解密key</param>/// <returns>加密后结果</returns>private static string Encrypt(string content, out string publicKey, out string privateKey){RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider;publicKey = rsaProvider.ToXmlString(false);privateKey = rsaProvider.ToXmlString(true);UnicodeEncoding ByteConverter = new UnicodeEncoding;byte DataToEncrypt = ByteConverter.GetBytes(content);byte resultBytes = rsaProvider.Encrypt(DataToEncrypt, false);return Convert.ToBase
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 你知道 HTTP 是如何使用 TCP 连接的吗?今天我就来告诉你
- 如何快速学习一门新的编程语言?
- 健康宝显示暂缓来京如何恢复,北京健康宝弹窗怎么关闭
- 黑客是如何查找网络安全漏洞的
- 压缩袋如何使用 压缩袋只能使用一次吗
- 韩式装修风格要如何设计
- 西班牙红酒如何分等级
- 小型饮水机如何选购
- 英式装修风格要如何设计
- 运费险该不该买 自己购买运费险吃亏吗