zoukankan      html  css  js  c++  java
  • des和Rijndael加密

    ------------IV的作用:
    为了保证数据的安全,.NET基类库中提供的私钥算法类使用称作密码块链(CBC,Cipher Block Chaining)的链模式,算法使用一个密钥和一个初始化向量(IV,Initialization Vector)对数据执行加密转换。密钥和初始化向量IV一起决定如何加密数据,以及如何将数据解密为原始数据。通信双方都必须知道这个密钥和初始化向量才能够加密和解密数据。

    初始化向量IV的作用:防止随机产生的明文和密文相同
    ------------加密类:
    #region public static DES encrypt for string
    ///<summary>
    ///static DES encrypt for string
    ///</summary>
    ///<returns>encrypted string</returns>
    ///<param name="OriginalString">original string</param>
    ///<param name="EncryptKey">encrypt key, must 8 characters</param>
    ///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
    public static string DesEncryptString(string OriginalString, string EncryptKey, string EncryptOffset)
    {
    byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
    byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    using (MemoryStream ms = new MemoryStream())
    {
    byte[] inData = Encoding.Default.GetBytes(OriginalString);
    try
    {
    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(inData, 0, inData.Length);
    cs.FlushFinalBlock();
    }

    return Convert.ToBase64String(ms.ToArray());
    }
    catch
    {
    return "";
    }
    }
    }

    #endregion

    #region public static DES decrypt for string
    ///<summary>
    ///DES decrypt for string
    ///</summary>
    ///<returns>dncrypted string</returns>
    ///<param name="EncryptedString">original string</param>
    ///<param name="EncryptKey">encrypt key, must 8 characters</param>
    ///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
    public static string DesDecryptString(string EncryptedString, string EncryptKey, string EncryptOffset)
    {
    byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
    byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();

    using (MemoryStream ms = new MemoryStream())
    {
    byte[] inData = Convert.FromBase64String(EncryptedString);
    try
    {
    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(inData, 0, inData.Length);
    cs.FlushFinalBlock();
    }

    return Encoding.Default.GetString(ms.ToArray());
    }
    catch
    {
    return "";
    }
    }
    }
    #endregion

    #region public static DES encrypt for file
    /// <summary>
    /// DES encrypt for file
    /// </summary>
    /// <param name="m_InFilePath">Input file path</param>
    /// <param name="m_OutFilePath">Output file path</param>
    /// <param name="strEncrKey">key, must 8 characters</param>
    ///<param name="strEncrOffset">encrypt IV, must >= 8 characters</param>
    /// <returns>success or not</returns>
    public static bool DESEncryptFile(string m_InFilePath, string m_OutFilePath, string strEncrKey, string strEncrOffset)
    {
    if (File.Exists(m_InFilePath) == false)
    {
    return false;
    }

    byte[] btKey = Encoding.Default.GetBytes(strEncrKey);
    byte[] btIV = Encoding.Default.GetBytes(strEncrOffset);
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] btFile = File.ReadAllBytes(m_InFilePath);

    using (FileStream fs = new FileStream(m_OutFilePath, FileMode.Create, FileAccess.Write))
    {
    try
    {
    using (CryptoStream cs = new CryptoStream(fs, des.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(btFile, 0, btFile.Length);
    cs.FlushFinalBlock();
    }

    fs.Close();
    }
    catch
    {
    fs.Close();
    return false;
    }
    }

    return true;
    }
    #endregion

    #region public static DES decrypt for file
    /// <summary>
    /// DES decrypt for file
    /// </summary>
    /// <param name="m_InFilePath">Input file path</param>
    /// <param name="m_OutFilePath">Output file path</param>
    /// <param name="sDecrKey">key, must 8 characters</param>
    ///<param name="strEncrOffset">encrypt IV, must >= 8 characters</param>
    /// <returns>success or not</returns>
    public static bool DESDecryptFile(string m_InFilePath, string m_OutFilePath, string sDecrKey, string strEncrOffset)
    {
    if (File.Exists(m_InFilePath) == false)
    {
    return false;
    }

    byte[] btKey = Encoding.Default.GetBytes(sDecrKey);
    byte[] btIV = Encoding.Default.GetBytes(strEncrOffset);
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] btFile = File.ReadAllBytes(m_InFilePath);

    using (FileStream fs = new FileStream(m_OutFilePath, FileMode.Create, FileAccess.Write))
    {
    try
    {
    using (CryptoStream cs = new CryptoStream(fs, des.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(btFile, 0, btFile.Length);
    cs.FlushFinalBlock();
    }
    fs.Close();
    }
    catch
    {
    fs.Close();
    return false;
    }
    }

    return true;
    }
    #endregion

    #region public static AES/CBC/PKCS7Padding encrypt for string
    ///<summary>
    ///static AES/CBC/PKCS7Padding encrypt for string
    ///</summary>
    ///<returns>encrypted string</returns>
    ///<param name="OriginalString">original string</param>
    ///<param name="EncryptKey">encrypt key, must 8 characters</param>
    ///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
    public static string AESEncryptString(string OriginalString, string EncryptKey, string EncryptOffset)
    {
    try
    {
    byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
    byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
    RijndaelManaged rDel = new RijndaelManaged();
    rDel.Key = btKey;
    rDel.Mode = CipherMode.CBC;
    rDel.Padding = PaddingMode.PKCS7;
    using (MemoryStream ms = new MemoryStream())
    {
    byte[] inData = Encoding.Default.GetBytes(OriginalString);
    using (CryptoStream cs = new CryptoStream(ms, rDel.CreateEncryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(inData, 0, inData.Length);
    cs.FlushFinalBlock();
    }
    return Convert.ToBase64String(ms.ToArray());
    }
    }
    catch
    {
    return "";
    }
    }
    #endregion

    #region public static AES/CBC/PKCS7Padding decrypt for string
    ///<summary>
    ///AES/CBC/PKCS7Padding decrypt for string
    ///</summary>
    ///<returns>dncrypted string</returns>
    ///<param name="EncryptedString">original string</param>
    ///<param name="EncryptKey">encrypt key, must 8 characters</param>
    ///<param name="EncryptOffset">encrypt IV, must >= 8 characters</param>
    public static string AESDecryptString(string EncryptedString, string EncryptKey, string EncryptOffset)
    {
    try
    {
    byte[] btKey = Encoding.Default.GetBytes(EncryptKey);
    byte[] btIV = Encoding.Default.GetBytes(EncryptOffset);
    RijndaelManaged rDel = new RijndaelManaged();
    rDel.Key = btKey;
    rDel.Mode = CipherMode.CBC;
    rDel.Padding = PaddingMode.PKCS7;
    using (MemoryStream ms = new MemoryStream())
    {
    byte[] inData = Convert.FromBase64String(EncryptedString);
    using (CryptoStream cs = new CryptoStream(ms, rDel.CreateDecryptor(btKey, btIV), CryptoStreamMode.Write))
    {
    cs.Write(inData, 0, inData.Length);
    cs.FlushFinalBlock();
    }
    return Encoding.Default.GetString(ms.ToArray());
    }
    }
    catch
    {
    return "";
    }
    }
    #endregion
    }

  • 相关阅读:
    java strtus2 拦截器(Interceptors)
    java ssm框架入门(三)正式项目的web.xml配置
    java Web监听器导图详解
    java web hello world(二)基于Servlet理解监听
    java ssm框架入门(二)添加语言滤器
    java web 自定义filter
    Java内存分配全面浅析
    Velocity !$ 和$!区别
    spring ioc原理(看完后大家可以自己写一个spring)
    Spring的AOP简单理解
  • 原文地址:https://www.cnblogs.com/guozefeng/p/3625935.html
Copyright © 2011-2022 走看看