using System;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace Sync.CoreLibrary
{
public class DESEncrypt
{
public static string ToHMACSHA1(string encryptText, string encryptKey)
{
//HMACSHA1加密
HMACSHA1 hmacsha1 = new HMACSHA1(Encoding.UTF8.GetBytes(encryptKey));
byte[] hashBytes = hmacsha1.ComputeHash(Encoding.UTF8.GetBytes(encryptText));
return HttpUtility.UrlEncode(Convert.ToBase64String(hashBytes), Encoding.UTF8);
}
public static string DesEncode(string decrypt, string key)
{
try
{
byte[] buildData = buildKey(Encoding.UTF8.GetBytes(key));
TripleDESCryptoServiceProvider tripleDESCryptoServiceProvider = new TripleDESCryptoServiceProvider
{
Key = buildData,
Padding = PaddingMode.PKCS7,
Mode = CipherMode.ECB,
};
ICryptoTransform DESEncrypt = tripleDESCryptoServiceProvider.CreateEncryptor();
byte[] decryptByte = Encoding.UTF8.GetBytes(decrypt);
byte[] encrtyptData = DESEncrypt.TransformFinalBlock(decryptByte, 0, decryptByte.Length);
StringBuilder builder = new StringBuilder();
for (int i = 0; i < encrtyptData.Length; i++)
{
int eightBit = encrtyptData[i];
builder.Append(toHex((byte)((eightBit & 0xf0) >> 4)));
builder.Append(toHex((byte)(eightBit & 0x0f)));
}
return builder.ToString();
}
catch (CryptographicException e)
{
Console.WriteLine("A Cryptographic error occurred: {0}", e.Message);
return null;
}
}
/// <summary>
/// 创建一个24位进制数组
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static byte[] buildKey(byte[] key)
{
if (key.Length < 24)
{
byte[] desKey = new byte[24];
Array.Copy(key, 0, desKey, 24 - key.Length, key.Length);
return desKey;
}
else
{
if (key.Length > 24)
{
byte[] desKey = new byte[24];
Array.Copy(key, key.Length - 24, desKey, 0, desKey.Length);
return desKey;
}
}
return key;
}
public static char toHex(byte val)
{
char ret = '0';
if (val >= 0 && val <= 9)
{
ret = (char)('0' + val);
}
else
{
switch (val)
{
case 10:
ret = 'A';
break;
case 11:
ret = 'B';
break;
case 12:
ret = 'C';
break;
case 13:
ret = 'D';
break;
case 14:
ret = 'E';
break;
case 15:
ret = 'F';
break;
}
}
return ret;
}
}
}