C# 字符串加密解密函数

时间:2022-03-06 23:04:09

原文: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();

}