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 in ms.toarray())
{
fs.writebyte(b);
}
fs.close();
cs.close();
ms.close();
return true;
}
/// <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());
}
/// <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;
}
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="inputstr">要解密的字符串</param>
/// <param name="keystr">密钥</param>
/// <returns>解密后的结果</returns>
static public string sdecryptstring(string inputstr,string keystr)
{
mysecurity ws=new mysecurity();
return ws.decryptstring(inputstr,keystr);
}
}
}
