欢迎光临
我们一直在努力

我的字符和文件加密类,128位加密-.NET教程,评论及其它

建站超值云服务器,限时71元/月

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);

}

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 我的字符和文件加密类,128位加密-.NET教程,评论及其它
分享到: 更多 (0)

相关推荐

  • 暂无文章