You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
7.3 KiB
214 lines
7.3 KiB
///-----------------------------------------------------------------------
|
|
/// <copyright file="EncryptMgr.cs" company="Origtek">
|
|
/// 程式代號: EncryptMgr
|
|
/// 程式名稱: 加解密總管
|
|
/// 程式說明: 提供加密解密
|
|
/// 起始作者: Hercules
|
|
/// 起始日期: 2016/06/17
|
|
/// 最新修改人: Hercules
|
|
/// 最新修日期: 2016/06/17
|
|
/// </copyright>
|
|
///-----------------------------------------------------------------------
|
|
#region 程式異動記錄
|
|
/// xx.YYYY/MM/DD VER AUTHOR COMMENTS(說明修改的內容)
|
|
/// 01.2016/06/17 1.0 Hercules CREATE
|
|
/// 最新修改人: Hercules
|
|
/// 最新修日期: 2016/06/17
|
|
#endregion
|
|
|
|
using OT.COM.Encryption;
|
|
using OT.COM.LogisticsUtil;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace SoldierData
|
|
{
|
|
/// <summary>
|
|
/// 類別名稱:EncryptMgr
|
|
/// 類別說明:加解密總管
|
|
/// 起始作者:Hercules
|
|
/// 起始日期:2016/06/17
|
|
/// 最新修改人: Hercules
|
|
/// 最新修日期: 2016/06/17
|
|
/// </summary>
|
|
public class SecurityUtil
|
|
{
|
|
private static Util _ut = new Util();
|
|
private static byte[] _Key = System.Text.Encoding.Unicode.GetBytes(_ut.GetSettingString("KEY"));
|
|
private static byte[] _IV = System.Text.Encoding.Unicode.GetBytes(_ut.GetSettingString("IV"));
|
|
private static AES _aes = new AES();
|
|
/// <summary>
|
|
/// 函式名稱:Encrypt
|
|
/// 函式說明:加密API
|
|
/// 起始作者:Hercules
|
|
/// 起始日期:2016/06/17
|
|
/// 最新修改人: Hercules
|
|
/// 最新修日期: 2016/06/17
|
|
/// </summary>
|
|
/// <param name="i_sPlaintext">明碼</param>
|
|
/// <param name="o_sCiphertext">暗碼</param>
|
|
/// <returns>錯誤訊息,若成功則為Null</returns>
|
|
public static string Encrypt(string i_sPlaintext, out string o_sCiphertext)
|
|
{
|
|
string sMsg = null;
|
|
string sRes = null;
|
|
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
byte[] baRes = _aes.EncryptStringToByte(
|
|
i_sPlaintext,
|
|
_Key,
|
|
_IV);
|
|
sRes = Convert.ToBase64String(baRes);
|
|
}
|
|
while (false);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = _ut.GetLastExceptionMsg(ex);
|
|
}
|
|
finally
|
|
{
|
|
o_sCiphertext = sRes;
|
|
}
|
|
|
|
return sMsg;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 函式名稱:Decrypt
|
|
/// 函式說明:解密API
|
|
/// 起始作者:Hercules
|
|
/// 起始日期:2016/06/17
|
|
/// 最新修改人: Hercules
|
|
/// 最新修日期: 2016/06/17
|
|
/// </summary>
|
|
/// <param name="i_sCiphertext">暗碼</param>
|
|
/// <param name="o_sPlaintext">明碼</param>
|
|
/// <returns>錯誤訊息,若成功則為Null</returns>
|
|
public static string Decrypt(string i_sCiphertext, out string o_sPlaintext)
|
|
{
|
|
string sMsg = null;
|
|
string sRes = null;
|
|
|
|
try
|
|
{
|
|
do
|
|
{
|
|
byte[] baCiphertext = Convert.FromBase64String(i_sCiphertext);
|
|
sRes = _aes.DecryptByteToString(
|
|
baCiphertext,
|
|
_Key,
|
|
_IV);
|
|
}
|
|
while (false);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sMsg = _ut.GetLastExceptionMsg(ex);
|
|
}
|
|
finally
|
|
{
|
|
o_sPlaintext = sRes;
|
|
}
|
|
|
|
return sMsg;
|
|
}
|
|
|
|
|
|
//默认密钥向量
|
|
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, out string o_sCiphertext)
|
|
{
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
byte[] rgbKey = Encoding.UTF8.GetBytes("chipmos_".Substring(0, 8));
|
|
byte[] rgbIV = Keys;
|
|
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();
|
|
o_sCiphertext = Convert.ToBase64String(mStream.ToArray());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
o_sCiphertext = encryptString;
|
|
sMsg = _ut.GetLastExceptionMsg(ex);
|
|
}
|
|
|
|
return sMsg;
|
|
}
|
|
|
|
/**/
|
|
/**/
|
|
/**/
|
|
/// <summary>
|
|
/// DES解密字符串
|
|
/// </summary>
|
|
/// <param name="decryptString">待解密的字符串</param>
|
|
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
|
|
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
|
|
public static string DecryptDES(string decryptString, out string o_sPlaintext)
|
|
{
|
|
string sMsg = null;
|
|
try
|
|
{
|
|
byte[] rgbKey = Encoding.UTF8.GetBytes("chipmos_".Substring(0, 8));
|
|
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();
|
|
o_sPlaintext = Encoding.UTF8.GetString(mStream.ToArray());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
o_sPlaintext = decryptString;
|
|
sMsg = _ut.GetLastExceptionMsg(ex);
|
|
}
|
|
|
|
return sMsg;
|
|
}
|
|
|
|
private static char[] constant =
|
|
{
|
|
'0','1','2','3','4','5','6','7','8','9',
|
|
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
|
|
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
|
|
};
|
|
public static string GetRandom(int Length)
|
|
{
|
|
System.Text.StringBuilder newRandom = new System.Text.StringBuilder(62);
|
|
Random rd = new Random();
|
|
for (int i = 0; i < Length; i++)
|
|
{
|
|
newRandom.Append(constant[rd.Next(62)]);
|
|
}
|
|
return newRandom.ToString();
|
|
}
|
|
|
|
}
|
|
}
|