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.
267 lines
9.2 KiB
267 lines
9.2 KiB
#region CopyRight
|
|
|
|
/****************************************************************
|
|
* Project:健康体检信息管理系统(PEIS)
|
|
* Author:张剑峰
|
|
* CLR Version:4.0.30319.42000
|
|
* CreateTime:2023-05-01 14:43:48
|
|
* Version:v2.0
|
|
*
|
|
* Description:
|
|
*
|
|
* History:
|
|
*
|
|
*****************************************************************
|
|
* Copyright @ 云南新八达科技有限公司 2023 All rights reserved
|
|
*****************************************************************/
|
|
|
|
#endregion CopyRight
|
|
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
|
|
namespace PEIS.Utils
|
|
{
|
|
/// <summary>
|
|
/// MySecurity(安全类) 的摘要说明。
|
|
/// </summary>
|
|
public class MySecurity
|
|
{
|
|
/// <summary>
|
|
/// 初始化安全类
|
|
/// </summary>
|
|
public MySecurity()
|
|
{
|
|
///默认密码
|
|
key = "peis77911@*71";
|
|
}
|
|
|
|
private string key; //默认密钥
|
|
|
|
private byte[] sKey;
|
|
private byte[] sIV;
|
|
|
|
#region 加密字符串
|
|
|
|
/// <summary>
|
|
/// 加密字符串
|
|
/// </summary>
|
|
/// <param name="inputStr">输入字符串</param>
|
|
/// <param name="keyStr">密码,可以为“”</param>
|
|
/// <returns>输出加密后字符串</returns>
|
|
public static string SEncryptString(string inputStr, string keyStr)
|
|
{
|
|
MySecurity ws = new MySecurity();
|
|
return ws.EncryptString(inputStr, keyStr);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 加密字符串
|
|
/// </summary>
|
|
/// <param name="inputStr">输入字符串</param>
|
|
/// <param name="keyStr">密码,可以为“”</param>
|
|
/// <returns>输出加密后字符串</returns>
|
|
public string EncryptString(string inputStr, string keyStr)
|
|
{
|
|
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
|
if (keyStr == "")
|
|
keyStr = key;
|
|
byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);
|
|
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);
|
|
SHA1 ha = new SHA1Managed();
|
|
byte[] hb = ha.ComputeHash(keyByteArray);
|
|
sKey = new byte[8];
|
|
sIV = new byte[8];
|
|
for (int i = 0; i < 8; i++)
|
|
sKey[i] = hb[i];
|
|
for (int i = 8; i < 16; i++)
|
|
sIV[i - 8] = hb[i];
|
|
des.Key = sKey;
|
|
des.IV = sIV;
|
|
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);
|
|
}
|
|
cs.Close();
|
|
ms.Close();
|
|
return ret.ToString();
|
|
}
|
|
|
|
#endregion 加密字符串
|
|
|
|
#region 加密字符串 密钥为系统默认 0123456789
|
|
|
|
/// <summary>
|
|
/// 加密字符串 密钥为系统默认
|
|
/// </summary>
|
|
/// <param name="inputStr">输入字符串</param>
|
|
/// <returns>输出加密后字符串</returns>
|
|
public static string SEncryptString(string inputStr)
|
|
{
|
|
MySecurity ws = new MySecurity();
|
|
return ws.EncryptString(inputStr, "");
|
|
}
|
|
|
|
#endregion 加密字符串 密钥为系统默认 0123456789
|
|
|
|
#region 加密文件
|
|
|
|
/// <summary>
|
|
/// 加密文件
|
|
/// </summary>
|
|
/// <param name="filePath">输入文件路径</param>
|
|
/// <param name="savePath">加密后输出文件路径</param>
|
|
/// <param name="keyStr">密码,可以为“”</param>
|
|
/// <returns></returns>
|
|
public bool EncryptFile(string filePath, string savePath, string keyStr)
|
|
{
|
|
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
|
if (keyStr == "")
|
|
keyStr = key;
|
|
FileStream fs = File.OpenRead(filePath);
|
|
byte[] inputByteArray = new byte[fs.Length];
|
|
fs.Read(inputByteArray, 0, (int)fs.Length);
|
|
fs.Close();
|
|
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);
|
|
SHA1 ha = new SHA1Managed();
|
|
byte[] hb = ha.ComputeHash(keyByteArray);
|
|
sKey = new byte[8];
|
|
sIV = new byte[8];
|
|
for (int i = 0; i < 8; i++)
|
|
sKey[i] = hb[i];
|
|
for (int i = 8; i < 16; i++)
|
|
sIV[i - 8] = hb[i];
|
|
des.Key = sKey;
|
|
des.IV = sIV;
|
|
MemoryStream ms = new MemoryStream();
|
|
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
|
|
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|
cs.FlushFinalBlock();
|
|
fs = File.OpenWrite(savePath);
|
|
foreach (byte b in ms.ToArray())
|
|
{
|
|
fs.WriteByte(b);
|
|
}
|
|
fs.Close();
|
|
cs.Close();
|
|
ms.Close();
|
|
return true;
|
|
}
|
|
|
|
#endregion 加密文件
|
|
|
|
#region 解密字符串
|
|
|
|
/// <summary>
|
|
/// 解密字符串
|
|
/// </summary>
|
|
/// <param name="inputStr">要解密的字符串</param>
|
|
/// <param name="keyStr">密钥</param>
|
|
/// <returns>解密后的结果</returns>
|
|
public static string SDecryptString(string inputStr, string keyStr)
|
|
{
|
|
MySecurity ws = new MySecurity();
|
|
return ws.DecryptString(inputStr, keyStr);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解密字符串 密钥为系统默认
|
|
/// </summary>
|
|
/// <param name="inputStr">要解密的字符串</param>
|
|
/// <returns>解密后的结果</returns>
|
|
public static string SDecryptString(string inputStr)
|
|
{
|
|
MySecurity ws = new MySecurity();
|
|
return ws.DecryptString(inputStr, "");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 解密字符串
|
|
/// </summary>
|
|
/// <param name="inputStr">要解密的字符串</param>
|
|
/// <param name="keyStr">密钥</param>
|
|
/// <returns>解密后的结果</returns>
|
|
public string DecryptString(string inputStr, string keyStr)
|
|
{
|
|
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
|
if (keyStr == "")
|
|
keyStr = key;
|
|
byte[] inputByteArray = new byte[inputStr.Length / 2];
|
|
for (int x = 0; x < inputStr.Length / 2; x++)
|
|
{
|
|
int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16));
|
|
inputByteArray[x] = (byte)i;
|
|
}
|
|
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);
|
|
SHA1 ha = new SHA1Managed();
|
|
byte[] hb = ha.ComputeHash(keyByteArray);
|
|
sKey = new byte[8];
|
|
sIV = new byte[8];
|
|
for (int i = 0; i < 8; i++)
|
|
sKey[i] = hb[i];
|
|
for (int i = 8; i < 16; i++)
|
|
sIV[i - 8] = hb[i];
|
|
des.Key = sKey;
|
|
des.IV = sIV;
|
|
MemoryStream ms = new MemoryStream();
|
|
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
|
|
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|
cs.FlushFinalBlock();
|
|
StringBuilder ret = new StringBuilder();
|
|
return System.Text.Encoding.Default.GetString(ms.ToArray());
|
|
}
|
|
|
|
#endregion 解密字符串
|
|
|
|
#region 解密文件
|
|
|
|
/// <summary>
|
|
/// 解密文件
|
|
/// </summary>
|
|
/// <param name="filePath">输入文件路径</param>
|
|
/// <param name="savePath">解密后输出文件路径</param>
|
|
/// <param name="keyStr">密码,可以为“”</param>
|
|
/// <returns></returns>
|
|
public bool DecryptFile(string filePath, string savePath, string keyStr)
|
|
{
|
|
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
|
|
if (keyStr == "")
|
|
keyStr = key;
|
|
FileStream fs = File.OpenRead(filePath);
|
|
byte[] inputByteArray = new byte[fs.Length];
|
|
fs.Read(inputByteArray, 0, (int)fs.Length);
|
|
fs.Close();
|
|
byte[] keyByteArray = Encoding.Default.GetBytes(keyStr);
|
|
SHA1 ha = new SHA1Managed();
|
|
byte[] hb = ha.ComputeHash(keyByteArray);
|
|
sKey = new byte[8];
|
|
sIV = new byte[8];
|
|
for (int i = 0; i < 8; i++)
|
|
sKey[i] = hb[i];
|
|
for (int i = 8; i < 16; i++)
|
|
sIV[i - 8] = hb[i];
|
|
des.Key = sKey;
|
|
des.IV = sIV;
|
|
MemoryStream ms = new MemoryStream();
|
|
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
|
|
cs.Write(inputByteArray, 0, inputByteArray.Length);
|
|
cs.FlushFinalBlock();
|
|
fs = File.OpenWrite(savePath);
|
|
foreach (byte b in ms.ToArray())
|
|
{
|
|
fs.WriteByte(b);
|
|
}
|
|
fs.Close();
|
|
cs.Close();
|
|
ms.Close();
|
|
return true;
|
|
}
|
|
|
|
#endregion 解密文件
|
|
}
|
|
} |