DESCryptoServiceProvider 类加密解密

DESCryptoServiceProvider  点击查看介绍

加密解密辅助类:点击查看

私钥加密

定义:定义一个包装对象来访问加密服务提供程序 (CSP) 版本的数据加密标准 (DES) 算法。 此类不能被继承。

研究这个类不如去研究它的父类,所以我们把重点转移到 Des这个类

Des

定义:表示数据加密标准 (DES) 算法的基类,所有 DES 实现都必须从此基类派生。

你需要知道:

你只用设置Key(秘钥)和 IV(向量)。

4.0以下

   des.Key = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(sKey, "md5").Substring(0, 8));

4.5或以上就会显示此类已过时,所以我们得换一种写法。

我们可以根据密码来加密

  public static string MD5(string str)
        {
            //微软md5方法参考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
            byte[] b = Encoding.Default.GetBytes(str);
            b = new MD5CryptoServiceProvider().ComputeHash(b);
            string ret = "";
            for (int i = 0; i < b.Length; i++)
                ret += b[i].ToString("x").PadLeft(2, ‘0‘); //转成16进制,如果小于2位用0补充
            return ret;
        }

我们配置好了Key和IV ,就可以使用这个了,你可以知道,加密和解密所配置的Key和IV必须为一样的。

  加密/解码都返回这个接口

准备工作完成了。最后一个类

CryptoStream 类

定义将数据流链接到加密转换的流。

第一个参数         流,

第二个参数         接口

第三个参数       枚举

完整的一套加密:

  ///// <summary>
        ///// 加密数据
        ///// </summary>
        ///// <param name="text">加密字符串</param>
        ///// <param name="skey">生成秘钥,默认为MATICSOFT</param>
        ///// <returns>返回加密字符串</returns>
        public static string Encrypt(string Text, string sKey = "MATICSOFT")
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.Default.GetBytes(Text); //把文本转成字节
            des.Key = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length); //写
            cs.FlushFinalBlock();
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat("{0:X2}", b);//十六进制字符串,后面的2为精度.
            }
            return ret.ToString();
        }

        /// <summary>
        /// 对秘钥进行处理
        /// </summary>
        /// <param name="str">你的秘钥</param>
        /// <returns></returns>
        public static string MD5(string str)
        {
            //微软md5方法参考return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "md5");
            byte[] b = Encoding.Default.GetBytes(str);
            b = new MD5CryptoServiceProvider().ComputeHash(b);
            string ret = "";
            for (int i = 0; i < b.Length; i++)
                ret += b[i].ToString("x").PadLeft(2, ‘0‘); //转成16进制,如果小于2位用0补充
            return ret;
        }
/// <summary>
        /// 解密数据
        /// </summary>
        /// <param name="Text">加密的字符串</param>
        /// <param name="sKey">解密秘钥</param>
        /// <returns>解密后的字符串</returns>
        public static string Decrypt(string Text, string sKey = "MATICSOFT")
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            des.IV = ASCIIEncoding.ASCII.GetBytes(MD5(sKey).Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.Default.GetString(ms.ToArray());
        }
时间: 2024-08-01 22:34:28

DESCryptoServiceProvider 类加密解密的相关文章

[C#] 常用工具类——加密解密类

using System; using System.Configuration; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using S

DES加密解密帮助类

public class DESCrypto { /// <summary> /// 初始化des实例秘钥及向量 /// </summary> /// <param name="key"></param> /// <returns></returns> private static DESCryptoServiceProvider InitDESInstance(string key) { DESCryptoSer

DES加密/解密类。

/// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { #region ========加密======== /// <summary> /// 加密 /// </summary> /// <param name="Text"></param> /// <returns></returns> public s

C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密

public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public static string Base64Encrypt(string input)

C# 加密解密(DES,3DES,MD5,Base64) 类

原文:C# 加密解密(DES,3DES,MD5,Base64) 类 保存! public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summary> /// <param name="input">需要加密的字符串</param> /// <returns></returns> public sta

PHP和.NET通用的加密解密函数类,均使用3DES加解密 .

以下为php代码 <PRE class=PHP name="code"> </PRE><PRE class=PHP name="code">PHP加解密函数:</PRE><PRE class=PHP name="code"> </PRE><PRE class=PHP name="code"> function encrypt($string)

MD5加密解密帮助类

using System; using System.Security.Cryptography; using System.Text; namespace Maticsoft.DBUtility { /// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { public DESEncrypt() { } #region ========加密======== /// <summary> /

常用密码加密解密操作相关类

/// <summary> /// 密码加密解密操作相关类 /// </summary> public static class EncryptHelper { #region MD5 加密 /// <summary> /// MD5加密 /// </summary> public static string Md532(this string source) { if (string.IsNullOrEmpty(source)) return null;

C# 常见加密解密类

常见的加密方式分为可逆和不可逆两种方式 可逆:RSA,AES,DES等 不可逆:常见的MD5,SHAD等 常见的加密方式封装到一个Password类中     public class Password     {         /// <summary>         /// 此代码示例通过创建哈希字符串适用于任何 MD5 哈希函数 (在任何平台) 上创建 32 个字符的十六进制格式哈希字符串         /// 官网案例改编         /// </summary>