Files
17168ERP/web/App_Code/encrypt.cs

194 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Security;
/// <summary>
/// 加密相關
/// </summary>
///
namespace MyWeb
{
public class encrypt
{
public string MD5(string str, int bits = 32) //MD5加密
{
if (bits == 16)
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
}
else
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
}
public string SHA1(string SourceStr) //SHA1加密
{
return FormsAuthentication.HashPasswordForStoringInConfigFile(SourceStr, "SHA1");
}
private byte[] Keys = { 0xEF, 0xAB, 0x56, 0x78, 0x90, 0x34, 0xCD, 0x12 };
public string EncryptDes(string SourceStr, string skey) //使用標準DES對稱加密, skey請帶入8位數自訂KEY
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(skey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(SourceStr);
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();
string str = Convert.ToBase64String(mStream.ToArray());
return str;
}
catch
{
return SourceStr;
}
}
public string DecryptDes(string SourceStr, string skey) //使用標準DES對稱解密, skey請帶入8位數自訂KEY
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(skey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(SourceStr);
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 SourceStr;
}
}
public string EncryptAutoKey(string str)
{
function f = new function();
if (!f.isStrNull(str))
{
string key = f.randKey(8);
string encode = EncryptDes(str, key);
str = f.randKey(3) + f.Left(key, 5) + f.Left(encode, encode.Length - 2) + f.Right(key, 3) + f.Right(encode, 2);
return str;
}
return "";
}
public string DecryptAutoKey(string str)
{
try
{
function f = new function();
if (!string.IsNullOrEmpty(str))
{
string str2 = str?.Substring(3, (str ?? "").Length - 3);
string key = f.Left(str2, 5) + f.Left(f.Right(str2, 5), 3);
str2 = str2.Substring(5, str2.Length - 10) + f.Right(str2, 2);
return DecryptDes(str2, key);
}
}
catch (Exception ex)
{
}
return str;
}
public string SHA256(string str)
{
using (SHA256 hash = SHA256Managed.Create())
{
return string.Concat(hash
.ComputeHash(Encoding.UTF8.GetBytes(str))
.Select(item => item.ToString("x2")));
}
}
public string followerHash(string s1, string s2)
{
string input = s1 + s2;
input = new string(input.Where(c =>
char.IsLetterOrDigit(c)).ToArray()).ToUpper();
return SHA256(input);
}
/// <summary>
/// 生成 search_keywords 的 HEX 編碼字串
/// </summary>
/// <param name="follower">follower 物件</param>
/// <returns>HEX 編碼字串</returns>
public string GenerateSearchKeywords(Model.follower follower)
{
try
{
// 解密各欄位
string phone_decrypted = string.IsNullOrEmpty(follower.phone) ? "" : DecryptAutoKey(follower.phone);
string cellphone_decrypted = string.IsNullOrEmpty(follower.cellphone) ? "" : DecryptAutoKey(follower.cellphone);
string id_code_decrypted = string.IsNullOrEmpty(follower.id_code) ? "" : DecryptAutoKey(follower.id_code);
string passport_decrypted = string.IsNullOrEmpty(follower.passport) ? "" : DecryptAutoKey(follower.passport);
// 組合字串 (使用 | 分隔)
string joinedString = string.Join("|", new string[] {
phone_decrypted,
cellphone_decrypted,
id_code_decrypted,
passport_decrypted
});
// 轉換為 HEX 編碼
if (string.IsNullOrEmpty(joinedString.Replace("|", "")))
{
return ""; // 如果所有欄位都是空的,返回空字串
}
byte[] bytes = Encoding.UTF8.GetBytes(joinedString);
string hexString = BitConverter.ToString(bytes).Replace("-", "").ToLower();
return hexString;
}
catch
{
return ""; // 發生錯誤時返回空字串
}
}
/// <summary>
/// 將搜尋字串轉換為 HEX 編碼 (用於搜尋功能)
/// </summary>
/// <param name="searchText">要搜尋的文字</param>
/// <returns>HEX 編碼字串</returns>
public string ConvertToHex(string searchText)
{
try
{
if (string.IsNullOrEmpty(searchText))
return "";
byte[] bytes = Encoding.UTF8.GetBytes(searchText);
string hexString = BitConverter.ToString(bytes).Replace("-", "").ToLower();
return hexString;
}
catch
{
return "";
}
}
}
}