LINUX DOTNET      Linux DotNET 中文社区

Linux .NET编程与应用技术之专业网站:www.linuxdot.net !     返回首页    
   
[楼主] [代码整理] DotNet中用到的加密算法总结

using System;
using System.Text;

public class CryptUtil
{
    public static string DecryptString(string input)
    {
        if (input.Equals(string.Empty))
        {
            return input;
        }

        byte[] byKey = { 0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E };
        byte[] IV = { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
        byte[] inputByteArray = new Byte[input.Length];
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        inputByteArray = Convert.FromBase64String(input);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        Encoding encoding = new UTF8Encoding();
        return encoding.GetString(ms.ToArray());
    }

    public static string EncryptString(string input)
    {
        if (input.Equals(string.Empty))
        {
            return input;
        }

        byte[] byKey = { 0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E };
        byte[] IV = { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 };
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        byte[] inputByteArray = Encoding.UTF8.GetBytes(input);
        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        return Convert.ToBase64String(ms.ToArray());
    }
    /**/
    /// <summary>
    /// DES + Base64 加密
    /// </summary>
    /// <param name="input">明文字符串</param>
    /// <returns>已加密字符串</returns>
    public static string DesBase64Encrypt(string input)
    {
        System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.ECB;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] byt;
        byte[] Key = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };
        byte[] IV = new byte[8] { 0, 0, 0, 0, 0, 0, 0, 0 };

        ct = des.CreateEncryptor(Key, IV);

        byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        byte[] answer = ms.ToArray();
        for (int j = 0; j < answer.Length; j++)
        {
            Console.Write(answer[j].ToString() + " ");
        }
        Console.WriteLine();
        return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
    }

    /**/
    /// <summary>
    /// DES + Base64 解密
    /// </summary>
    /// <param name="input">密文字符串</param>
    /// <returns>解密字符串</returns>
    public static string DesBase64Decrypt(string input)
    {
        System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.ECB;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] byt;
        byte[] Key = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };
        byte[] IV = new byte[8] { 0, 0, 0, 0, 0, 0, 0, 0 };

        ct = des.CreateDecryptor(Key, IV);
        byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    }

    /**/
    /// <summary>
    /// DES + Base64 加密
    /// </summary>
    /// <param name="input">明文字符串</param>
    /// <returns>已加密字符串</returns>
    public static string DesBase64EncryptForID5(string input)
    {
        System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.CBC;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] byt;
        byte[] Key = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };
        byte[] IV = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };

        ct = des.CreateEncryptor(Key, IV);

        byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        byte[] answer = ms.ToArray();
        for (int j = 0; j < answer.Length; j++)
        {
            Console.Write(answer[j].ToString() + " ");
        }
        Console.WriteLine();
        return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
    }


    /**/
    /// <summary>
    /// DES + Base64 解密
    /// </summary>
    /// <param name="input">密文字符串</param>
    /// <returns>解密字符串</returns>
    public static string DesBase64DecryptForID5(string input)
    {
        System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.CBC;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] byt;
        byte[] Key = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };
        byte[] IV = new byte[8] { 56, 50, 55, 56, 56, 55, 49, 49 };

        ct = des.CreateDecryptor(Key, IV);
        byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    }


    /**/
    /// <summary>
    /// 3DES 加密 Byte[] to HEX string
    /// </summary>
    /// <param name="input">明文字符串</param>
    /// <returns>已加密字符串</returns>
    public static string ThreeDesEncryptHEX(string input)
    {
        string result = "";
        System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.CBC;
        des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] byt;
        byte[] Key = new byte[24]{
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6
                                     };
        byte[] IV = new byte[8] { 1, 2, 3, 4, 5, 6, 1, 2 };

        ct = des.CreateEncryptor(Key, IV);

        byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        byte[] answer = ms.ToArray();
        for (int j = 0; j < answer.Length; j++)
        {
            result += answer[j].ToString("x").PadLeft(2, '0');
        }
        return result;
    }

    /**/
    /// <summary>
    /// 3DES + HEX to byte[] 解密
    /// </summary>
    /// <param name="input">密文字符串</param>
    /// <returns>解密字符串</returns>
    public static string ThreeDesDecryptHEX(string input)
    {
        System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
        des.Mode = System.Security.Cryptography.CipherMode.CBC;
        des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
        ICryptoTransform ct;
        MemoryStream ms;
        CryptoStream cs;
        byte[] Key = new byte[24]{
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6,
                                         1,2,3,4,5,6
                                     };
        byte[] IV = new byte[8] { 1, 2, 3, 4, 5, 6, 1, 2 };

        ct = des.CreateDecryptor(Key, IV);
        //byt = Convert.FromBase64String(input); // 将 密文 以 HEX to byte[]编码转换成 byte 数组
        if (input.Length <= 1)
        {
            throw new Exception("encrypted HEX string is too short!");
        }
        byte[] byt = new byte[input.Length / 2];
        for (int i = 0; i < byt.Length; i++)
        {
            //Console.WriteLine(input.Substring(i*2,2));
            byt[i] = Convert.ToByte(input.Substring(i * 2, 2), 16);
        }

        ms = new MemoryStream();
        cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
        cs.Write(byt, 0, byt.Length);
        cs.FlushFinalBlock();

        cs.Close();

        return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
    }
    /**/
    /// <summary>
    /// Base64解码
    /// </summary>
    /// <param name="base64Str"></param>
    /// <returns></returns>
    public static string DecodingFromBase64(string base64Str)
    {
        Byte[] bytes = Convert.FromBase64String(base64Str);
        return System.Text.Encoding.UTF8.GetString(bytes);
    }
    /**/
    /// <summary>
    /// Base64编码
    /// </summary>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string EncodingToBase64(string str)
    {
        return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
    }
    /**/
    /// <summary>
    /// 根据指定的编码方式Base64解码
    /// </summary>
    /// <param name="base64Str"></param>
    /// <param name="strEncoding"></param>
    /// <returns></returns>
    public static string DecodingFromBase64(string base64Str, System.Text.Encoding strEncoding)
    {
        Byte[] bytes = Convert.FromBase64String(base64Str);
        return strEncoding.GetString(bytes);
    }
    /**/
    /// <summary>
    /// 根据指定的编码方式Base64编码
    /// </summary>
    /// <param name="str"></param>
    /// <param name="strEncoding"></param>
    /// <returns></returns>
    public static string EncodingToBase64(string str, System.Text.Encoding strEncoding)
    {
        return Convert.ToBase64String(strEncoding.GetBytes(str));
    }
}

/*******************************************
 * 两个常用的方法


    /// <summary>
        /// 通过字节数组形式的密钥获取字符串形式的密钥
        /// </summary>
        void GetStringByByteArray()
        {
            byte[] Key = new byte[8]{56,50,55,56,56,55,49,49}; 
            Response.Write(System.Text.Encoding.Default.GetString(Key));
            Response.End();
        }

       /// <summary>
       /// 通过字符串形式的密钥获取字节数组形式的密钥
       /// </summary>
       void GetByteArrayByString()
       {
           string key = "82788711";
           Response.Write(System.Text.Encoding.Default.GetBytes(key));
           Response.End();
           
       }

**********************************************************/

作者:mononet   发布时间:08年12月20日   可选操作:删除 回复

 
   
   

留言回复:
标题: * 标题必填
作者:   * 请填上你的名字  
操作键:   * 填入几个字母表示是您写的,便于进一步操作
发言内容:
 
发贴者须知:
1、您无需注册即可发贴,但是,贴子内容必须在法律法规和社会公德所允许的范围内;
2、本站专注IT技术,谢绝包括政治、社会、情感等任何与IT技术无关的贴子在本站发表;
3、本站保留对任何贴子进行删除、禁用、更改、举报、追究等所有权利;
 
今天是: 周四  周一  周二  周三  周七  周五  周六