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 = new StringBuilder(); foreach (byte b in mStream.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.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();
        }

 


上一篇:算法名称


下一篇:Xamarin.Android 本地数据库 SQLiteDatabase 操作