.net中的带密钥的加密与解密

来源:互联网 发布:怎么用网站做淘宝客 编辑:程序博客网 时间:2024/06/06 07:05

在项目中看到了一个项目在访问一个独立的webservice服务时url里面加了一个加密的条件,防止别人调用webservice,下面是关于怎么样加密与解密的,网上有很多案例,在此收录以后用到了方便寻找。

using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;using System.IO;namespace HRO.ComModules.Function{    public class Crypt    {        #region 解密函数        /// <summary>        /// 功能描述: 解密函数        /// </summary>        /// <param name="p_ToDecrypt">需要解密的字符串</param>        /// <returns>解密后的字符串</returns>        public string Decrypt(string p_ToDecrypt)        {            return DecryptDES(p_ToDecrypt, "nicemytf");        }        #endregion        #region 加密函数        /// <summary>        /// 功能描述: 加密函数        /// </summary>        /// <param name="p_ToEncrypt">需要加密的字符串</param>        /// <returns>加密后的字符串</returns>        public string Encrypt(string p_ToEncrypt)        {            return EncryptDES(p_ToEncrypt, "nicemytf");        }        #endregion            /// <summary>        /// DES加密字符串        /// </summary>        /// <param name="encryptString">待加密的字符串</param>        /// <param name="encryptKey">加密密钥,要求为8位</param>        /// <returns>加密成功返回加密后的字符串,失败返回源串</returns>        private string EncryptDES(string encryptString, string encryptKey)        {            try            {                //加密的密钥需要看下DESCryptoServiceProvider中参数的长度,长度必须一样才行                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));                byte[] rgbIV = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();                MemoryStream mStream = new MemoryStream();                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                cStream.Write(inputByteArray, 0, inputByteArray.Length);                cStream.FlushFinalBlock();                return Convert.ToBase64String(mStream.ToArray());            }            catch            {                return encryptString;            }        }                    /// <summary>        /// DES解密字符串        /// </summary>        /// <param name="decryptString">待解密的字符串</param>        /// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>        /// <returns>解密成功返回解密后的字符串,失败返源串</returns>        private string DecryptDES(string decryptString, string decryptKey)        {            try            {                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);                byte[] rgbIV = Encoding.UTF8.GetBytes(decryptKey);                byte[] inputByteArray = Convert.FromBase64String(decryptString);                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();                MemoryStream mStream = new MemoryStream();                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);                cStream.Write(inputByteArray, 0, inputByteArray.Length);                cStream.FlushFinalBlock();                return Encoding.UTF8.GetString(mStream.ToArray());            }            catch            {                return decryptString;            }        }     }}

0 0