对称加密
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
定义:需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。
优点:对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
缺点:对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。
其次如果一方的秘钥被泄露,那么加密信息也就不安全了。
另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,密钥管理成为双方的负担。
常用算法:
不同算法的实现机制不同,可参考对应算法的详细资料。
C# demo(DES):
/// <summary> /// 加密字符串 /// </summary> /// <param name="strText">明文</param> /// <param name="encryptKey">密钥</param> /// <returns></returns> static string DesEncrypt(string strText, string encryptKey) { string outString = ""; byte[] byKey = null; byte[] IV = Encoding.Default.GetBytes(encryptKey); try { byKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, encryptKey.Length)); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Mode = CipherMode.ECB; byte[] inputByteArray = Encoding.UTF8.GetBytes(strText); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); outString = Convert.ToBase64String(ms.ToArray()); } catch (Exception) { outString = ""; } return outString; }
/// <summary> /// 解密字符串 /// </summary> /// <param name="strText">密文</param> /// <param name="decryptKey">密钥</param> /// <returns></returns> static string DesDecrypt(string strText, string decryptKey) { string outString = ""; byte[] byKey = null; byte[] IV = Encoding.Default.GetBytes(decryptKey); byte[] inputByteArray = new Byte[strText.Length]; try { byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0, decryptKey.Length)); DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Mode = CipherMode.ECB; inputByteArray = Convert.FromBase64String(strText); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); System.Text.Encoding encoding = new System.Text.UTF8Encoding(); outString = encoding.GetString(ms.ToArray()); } catch (Exception) { outString = ""; } return outString; }
static void Main(string[] args) { //密钥是您的用户ID(即用户名,不是openid)的前8位,不足8位则用数字0补齐 string key = "12345678"; //待加密字符串 string s1 = "1"; //加密 string s2 = DesEncrypt(s1, key); //解密 string s3 = DesDecrypt(s2, key); //加密、解密输出 Console.WriteLine("加密前:" + s1); Console.WriteLine("加密后:" + s2); Console.WriteLine("解密后:" + s3); Console.ReadLine(); }


浙公网安备 33010602011771号