首页 > 代码库 > C# 字符串加密解密函数

C# 字符串加密解密函数

原文:C# 字符串加密解密函数

using System;
using System.Text;
using System.Security.Cryptography;
using System.IO;

 

//默认密钥向量
private static byte[] Keys 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
    
try
    {
        
byte[] rgbKey Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
        
byte[] rgbIV Keys;//byte[] rgbIV rgbKey;
        
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();

//返回的格式

//修改后 为了匹配下一篇php的des加密解密

StringBuilder ret = newStringBuilder(); foreach (byte b in mStream.ToArray()) {ret.AppendFormat("{0:X2}", b); } ret.ToString(); returnret.ToString();
        //
return Convert.ToBase64String(mStream.ToArray());
    }
    
catch
    {
        
return encryptString;
    }
}

/// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
    
try
    {
        
byte[] rgbKey Encoding.UTF8.GetBytes(decryptKey);
        
byte[] rgbIV Keys;
        
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;
    }
}

===========================================================================================

小知识:

上面的密钥向量可以用字符串转换得到,那个0x12 看也看不动 算不来

 

C#中将字符串转换byte[],同时将byte[]换成字符串

 

 

1   string   to byte  []
  string   str  =   "abcd"   
  byte[]   bytes  =  System.Text.Encoding.UTF8.GetBytes(str);   
   -------------------------------------------------------------------------------------------------------------
 2  byte[]   to  string   
    
  byte[]   bytes  =   new  byte[255]    
   string   str  =  System.Text.Encoding.UTF8.GetString(bytes,0,bytes.Length);   
--------------------------------------------------------------------------------------------

在附上二个方法:

   private static byte[]HexStringToByteArray(string s)
       {
           s = s.Replace(" ", "");
           byte[] buffer = new byte[s.Length / 2];
           for (int i = 0; i < s.Length; i += 2)
               buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2),16);
           return buffer;
       }


       private string ByteArrayToHexString(byte[] data)
       {
           StringBuilder sb = new StringBuilder(data.Length * 3);
           foreach (byte b in data)
               sb.Append(Convert.ToString(b, 16).PadLeft(2, ‘0‘).PadRight(3, ‘‘));
           return sb.ToString().ToUpper();
       }

 


C# 字符串加密解密函数