ibms-dome/Repository/Models/Share.cs

290 lines
9.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Repository.Models
{
/// <summary>
/// Encryption Decryption Function - 加解密
/// </summary>
///
public class EDFunctionKey
{
public string AES_KEY //AES_KEY金鑰
{
get {
return "TAIPEIDO";
}
}
public string AES_IV //AES_IV初始化向量字串
{
get {
return "TAIPEIDO";
}
}
}
public class EDFunction
{
const string SHA256_KEY = "DOMETAIPEI"; //自訂金鑰
const string DES_KEY = "TAIPEIDO"; //DES_KEY金鑰(8位字元)
const string DES_IV = "TAIPEIDO"; //DES_IV初始化向量字串(8位字元)
EDFunctionKey EDFunctionKey = new EDFunctionKey();
//const string AES_KEY = "HUMANESA"; //AES_KEY金鑰
//const string AES_IV = "HUMANESA"; //AES_IV初始化向量字串
/// <summary>
/// 單向加密SHA256
/// </summary>
/// <param name="text">加密字串</param>
/// <returns></returns>
public string GetSHA256Encryption(string text)
{
string signRet = string.Empty;
byte[] key_byte = Encoding.Default.GetBytes(SHA256_KEY);
using (HMACSHA256 mac = new HMACSHA256(key_byte))
{
byte[] source = Encoding.Default.GetBytes(text);//將字串轉為Byte[]
byte[] crypto = mac.ComputeHash(source);//進行SHA256加密
signRet = Convert.ToBase64String(crypto);//把加密後的字串從Byte[]轉為字串
}
return signRet;
}
/// <summary>
/// DES加密
/// </summary>
/// <param name="text">待加密資料</param>
/// <returns></returns>
public string DESEncrypt(string text)
{
try
{
byte[] byKey = Encoding.ASCII.GetBytes(DES_KEY); //密鑰
byte[] byIV = Encoding.ASCII.GetBytes(DES_IV); //IV值
byte[] data = Encoding.Unicode.GetBytes(text);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();//加密、解密對象
MemoryStream MStream = new MemoryStream();//內存流對象
//用內存流實例化加密流對象
CryptoStream CStream = new CryptoStream(MStream, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length);//向加密流中寫入數據
CStream.FlushFinalBlock();//將數據壓入基礎流
byte[] temp = MStream.ToArray();//從內存流中獲取字節序列
CStream.Close();//關閉加密流
MStream.Close();//關閉內存流
return Convert.ToBase64String(temp);//返回加密後的字符串
}
catch
{
return text;
}
}
/// <summary>
/// DES解密
/// </summary>
/// <param name="text">待解密字符串</param>
/// <returns></returns>
public string DESDecrypt(string text)
{
try
{
byte[] byKey = Encoding.ASCII.GetBytes(DES_KEY); //DES密鑰
byte[] byIV = Encoding.ASCII.GetBytes(DES_IV); //IV值
byte[] data = Convert.FromBase64String(text);
DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
MemoryStream MStream = new MemoryStream();
//用內存流實例化解密流對象
CryptoStream CStream = new CryptoStream(MStream, descsp.CreateDecryptor(byKey, byIV), CryptoStreamMode.Write);
CStream.Write(data, 0, data.Length);//向加密流中寫入數據
CStream.FlushFinalBlock();//將數據壓入基礎流
byte[] temp = MStream.ToArray();//從內存流中獲取字節序列
CStream.Close();//關閉加密流
MStream.Close();//關閉內存流
return Encoding.Unicode.GetString(temp);//返回解密後的字符串
}
catch
{
return text;
}
}
/// <summary>
/// AES加密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public string AESEncrypt(string text)
{
var encrypt = "";
try
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(EDFunctionKey.AES_KEY));
byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(EDFunctionKey.AES_IV));
byte[] dataByteArray = Encoding.UTF8.GetBytes(text);
using (MemoryStream ms = new MemoryStream())
{
using (
CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(keyData, ivData), CryptoStreamMode.Write)
)
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
}
return encrypt;
}
catch
{
return text;
}
}
/// <summary>
/// AES解密
/// </summary>
/// <param name="text"></param>
/// <returns></returns>
public string AESDecrypt(string text)
{
var decrypt = "";
try
{
SymmetricAlgorithm aes = new AesCryptoServiceProvider();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
SHA256CryptoServiceProvider sha256 = new SHA256CryptoServiceProvider();
byte[] keyData = sha256.ComputeHash(Encoding.UTF8.GetBytes(EDFunctionKey.AES_KEY));
byte[] ivData = md5.ComputeHash(Encoding.UTF8.GetBytes(EDFunctionKey.AES_IV));
byte[] dataByteArray = Convert.FromBase64String(text);
using (MemoryStream ms = new MemoryStream())
{
using (
CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(keyData, ivData), CryptoStreamMode.Write)
)
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
decrypt = Encoding.UTF8.GetString(ms.ToArray());
}
}
return decrypt;
}
catch
{
return text;
}
}
}
/// <summary>
/// 回傳結果
/// </summary>
/// <typeparam name="T">資料型別</typeparam>
public class ApiResult<T>
{
public string Code { get; set; }
public string Msg { get; set; }
public T Data { get; set; }
}
/// <summary>
/// 資料夾
/// </summary>
public class FolderFunction
{
/// <summary>
/// 創建資料夾
/// </summary>
/// <param name="folderPath"></param>
/// <param name="tempType">0:找到資料夾也不刪除 1:找到資料夾並且刪除</param>
public void CreateFolder(string folderPath, int type)
{
DirectoryInfo dInfo = new DirectoryInfo(folderPath);
if (dInfo.Exists) //找到
{
if (type == 1)
{
dInfo.Delete(true); //如果資料夾裡面有檔案給bool參數就可以直接刪除沒給bool參數會報錯誤
}
dInfo.Create();
}
else //沒找到
{
dInfo.Create(); //建立新的資料夾
}
}
/// <summary>
/// 刪除檔案
/// </summary>
/// <param name="filePath"></param>
public void DeleteFile(string filePath)
{
System.IO.FileInfo file = new System.IO.FileInfo(filePath);
if (File.Exists(filePath)) //找到
{
//do something
file.Delete();
}
else //沒找到
{
//do something
}
}
}
/// <summary>
/// 轉換Niagara tag符號
/// </summary>
public class TagChangeFunction
{
/// <summary>
/// 拆解tagName後若開頭為數字則做轉換
/// </summary>
public string[] AddStringIfStartsWithDigit(string deviceNumber, string appendString)
{
Regex regex = new Regex(@"^\d");
string[] parts = deviceNumber.Split("_");
for (int i = 0; i < parts.Length; i++)
{
if (regex.IsMatch(parts[i]))
{
parts[i] = appendString + parts[i];
}
}
return parts;
}
}
}