using System;
using System.Security;
using System.Security.Cryptography;
using System.IO;
using System.Text;
namespace MySecurity
{
public class MySecurity
{
public MySecurity()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private string key="1234567890"; //默认密钥
private byte[] sKey;
private byte[] sIV;
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="inputStr">输入字符串</param>
/// <param name="keyStr">密码,可以为“”</param>
/// <returns>输出加密后字符串</returns>
static public 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();
}
/// <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 i