我的字符和文件加密类,128位加密

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;

///

1<summary>   
2/// 加密字符串   
3/// </summary>

///

1<param name="inputStr"/>

输入字符串
///

1<param name="keyStr"/>

密码,可以为“”
///

1<returns>输出加密后字符串</returns>

static public string SEncryptString(string inputStr,string keyStr)
{
MySecurity ws=new MySecurity();
return ws.EncryptString(inputStr,keyStr);
}

///

1<summary>   
2/// 加密字符串   
3/// </summary>

///

1<param name="inputStr"/>

输入字符串
///

1<param name="keyStr"/>

密码,可以为“”
///

1<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();
}

///

1<summary>   
2/// 加密文件   
3/// </summary>

///

1<param name="filePath"/>

输入文件路径
///

1<param name="savePath"/>

加密后输出文件路径
///

1<param name="keyStr"/>

密码,可以为“”
///

1<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;
}

///

1<summary>   
2/// 解密字符串   
3/// </summary>

///

1<param name="inputStr"/>

要解密的字符串
///

1<param name="keyStr"/>

密钥
///

1<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());
}

///

1<summary>   
2/// 解密文件   
3/// </summary>

///

1<param name="filePath"/>

输入文件路径
///

1<param name="savePath"/>

解密后输出文件路径
///

1<param name="keyStr"/>

密码,可以为“”
///

1<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;
}

///

1<summary>   
2/// 解密字符串   
3/// </summary>

///

1<param name="inputStr"/>

要解密的字符串
///

1<param name="keyStr"/>

密钥
///

1<returns>解密后的结果</returns>

static public string SDecryptString(string inputStr,string keyStr)
{
MySecurity ws=new MySecurity();
return ws.DecryptString(inputStr,keyStr);
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus