using Microsoft.VisualBasic;
using System.Security.Cryptography;
using System.Text;
namespace RB_MES_API.Context
{
///
/// 密码管理
///
public class AESHelp
{
private static string appkey = "RB@8636926";
///
/// 加密
///
/// 原文
/// 密文(Base64字符串)
public static string Encrypt(string sourceText)
{
return Encrypt(sourceText, appkey);
}
///
/// 加密
/// Key和IV将被转换为MD5值
///
/// 原文
/// 密匙
/// 密文(Base64字符串)
private static string Encrypt(string sourceText, string sKey)
{
var des = DES.Create();
byte[] inputByteArray;
inputByteArray = Encoding.Default.GetBytes(sourceText);
des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
StringBuilder ret = new StringBuilder();
foreach (byte b in ms.ToArray())
{
ret.AppendFormat("{0:X2}", b);
}
ms.Dispose();
cs.Dispose();
des.Dispose();
return ret.ToString();
}
///
/// 解密
///
/// 密文
/// 原文
public static string Decrypt(string cipherText)
{
if (!string.IsNullOrEmpty(cipherText))
{
return Decrypt(cipherText, appkey);
}
else
{
return "";
}
}
///
/// 解密
///
/// 加密文本
/// 密匙
///
private static string Decrypt(string sourceText, string sKey)
{
var des = DES.Create();
int len;
len = sourceText.Length / 2;
byte[] inputByteArray = new byte[len];
int x, i;
for (x = 0; x < len; x++)
{
i = Convert.ToInt32(sourceText.Substring(x * 2, 2), 16);
inputByteArray[x] = (byte)i;
}
des.Key = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
des.IV = Encoding.ASCII.GetBytes(Md5Hash(sKey).Substring(0, 8));
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
byte[] msstr = ms.ToArray();
cs.Dispose();
ms.Dispose();
des.Dispose();
return Encoding.Default.GetString(msstr);
}
///
/// 32位MD5加密
///
/// 要转为byte[]的文本
///
private static string Md5Hash(string input)
{
MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < data.Length; i++)
{
sBuilder.Append(data[i].ToString("x2"));
}
md5Hasher.Dispose();
return sBuilder.ToString();
}
///
/// 金蝶K3、KIS系列用户解密。想要加密算法的,联系13823037922
///
///
///
public static string K3Decrypt(string password)
{
if (password == null) return string.Empty;
int lenint, ASCInt1, ASCInt2, iMod, i;
string UnEncryptStrt, sMidStr;
UnEncryptStrt = "";
i = 1;
iMod = 1;
password = Strings.Mid(password, 51, (Strings.Len(password) - 50));
lenint = Strings.Len(password);
while (i < lenint)
{
sMidStr = Strings.Mid(password, i, 1);
ASCInt1 = Strings.Asc(sMidStr);
i = i + 1;
sMidStr = Strings.Mid(password, i, 1);
ASCInt2 = Strings.Asc(sMidStr);
iMod = iMod % 3;
if (iMod == 1)
{
UnEncryptStrt = UnEncryptStrt + Strings.Chr((ASCInt1 - 32) * 64 + ASCInt2 - 32);
i = i + 1;
}
if (iMod == 2)
{
UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 16 + (ASCInt2 - 32) / (double)4));
i = i + 1;
}
if (iMod == 0)
UnEncryptStrt = UnEncryptStrt + Strings.Chr((int)((ASCInt1 - 32) * 4 + (ASCInt2 - 32) / (double)16));
i = i + 1;
iMod = iMod + 1;
}
return UnEncryptStrt;
}
///
/// AES 加密
///
/// 明文(待加密)
/// 密文
///
public static string AesEncrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
var rm = Aes.Create();
rm.Key = Encoding.UTF8.GetBytes(key);
rm.Mode = CipherMode.ECB;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
///
/// AES 解密
///
/// 明文(待解密)
/// 密文
///
public static string AesDecrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(str);
var rm = Aes.Create();
rm.Key = Encoding.UTF8.GetBytes(key);
rm.Mode = CipherMode.ECB;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
}
}