天天看点

C# 字符串加密解密函数 C#中将字符串转换byte[],同时将byte[]换成字符串

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;

}

/// DES解密字符串

/// <param name="decryptString">待解密的字符串</param>

/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>

/// <returns>解密成功返回解密后的字符串,失败返源串</returns>

public static string DecryptDES(string decryptString, string decryptKey)

        byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);

        byte[] rgbIV = Keys;

        byte[] inputByteArray = Convert.FromBase64String(decryptString);

        DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();

        CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);

        return Encoding.UTF8.GetString(mStream.ToArray());

        return decryptString;

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

小知识:

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

1   string   to

byte  []

  string   str  

=   "abcd"  ;

  byte[]   bytes

  =  

System.Text.Encoding.UTF8.GetBytes(str);   

   -------------------------------------------------------------------------------------------------------------

 2  

byte[]   to  

string   

  =   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();