DES加密和解密遇到的問題

      
 static string key = "abcefghk";    //定義密鑰
        /// <summary> /// 加密字符串   
        /// </summary>  
        /// <param name="str">要加密的字符串</param>  
        /// <returns>加密後的字符串</returns>  
        public static string Encrypt(string encryptString)
        {
            var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
            var keyIV = keyBytes;
            var inputByteArray = Encoding.UTF8.GetBytes(encryptString);
            var provider = new DESCryptoServiceProvider();
            var mStream = new MemoryStream();
            var cStream = new CryptoStream(mStream, provider.CreateEncryptor(keyBytes, keyIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            var str = Convert.ToBase64String(mStream.ToArray());
            return str.Replace("+", "%2B");
        }
        public static string Decrypt(string decryptString)
        {
            var count = decryptString.Length;
            var keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 8));
            var keyIV = keyBytes;
            var inputByteArray = Convert.FromBase64String(decryptString);
            var provider = new DESCryptoServiceProvider();
            var mStream = new MemoryStream();
            var cStream = new CryptoStream(mStream, provider.CreateDecryptor(keyBytes, keyIV), CryptoStreamMode.Write);
            cStream.Write(inputByteArray, 0, inputByteArray.Length);
            cStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(mStream.ToArray());
        }

注意事項:(1)定義密鑰時字符串長度爲4的倍數 不然在解密的時候會出現報異常 字符串長度問題

(2)字符串進行了加密後 如果字符串中有符號+  替換爲   str.Replace("+", "%2B"); 原因是瀏覽器接收加密後的字符串 request 請求回來時會自動解密一次,+號都變爲了空格 

解密 會拋出 字符串長度問題。  這兩個問題讓我糾結了好久  出現其他問題下次再記錄

</pre><pre name="code" class="csharp">


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章