首页 > 开发 > 综合 > 正文

DES(Data Encryption Standard)加密解密整理

2024-07-21 02:24:34
字体:
来源:转载
供稿:网友
这个类是我在网上参考了几个文档总结出来的,测试过可以直接用,后面有一段md5的,应该独立成一个类的,我懒,所以测试的时候就写到一个文件里了,感觉还是满实用的,如果有什么机密文件,就用这个东西处理一下,将来要看的时候再反过来处理一下,只是你不要忘记了密码就对了,如果你跟我一样懒,你直接把下面的代码拷贝下来直接用吧。
using system;
using system.io;
using system.text;
using system.security.cryptography;
using system.web;

namespace test.com
{
/// <summary>
/// desencryptor 的摘要说明。
/// </summary>
public class desencryptor
{
#region 私有成员
/// <summary>
/// 输入字符串
/// </summary>
private string inputstring=null;
/// <summary>
/// 输出字符串
/// </summary>
private string outstring=null;
/// <summary>
/// 输入文件路径
/// </summary>
private string inputfilepath=null;
/// <summary>
/// 输出文件路径
/// </summary>
private string outfilepath=null;
/// <summary>
/// 加密密钥
/// </summary>
private string encryptkey=null;
/// <summary>
/// 解密密钥
/// </summary>
private string decryptkey=null;
/// <summary>
/// 提示信息
/// </summary>
private string notemessage=null;
#endregion
#region 公共属性
/// <summary>
/// 输入字符串
/// </summary>
public string inputstring
{
get{return inputstring;}
set{inputstring=value;}
}
/// <summary>
/// 输出字符串
/// </summary>
public string outstring
{
get{return outstring;}
set{outstring=value;}
}
/// <summary>
/// 输入文件路径
/// </summary>
public string inputfilepath
{
get{return inputfilepath;}
set{inputfilepath=value;}
}
/// <summary>
/// 输出文件路径
/// </summary>
public string outfilepath
{
get{return outfilepath;}
set{outfilepath=value;}
}
/// <summary>
/// 加密密钥
/// </summary>
public string encryptkey
{
get{return encryptkey;}
set{encryptkey=value;}
}
/// <summary>
/// 解密密钥
/// </summary>
public string decryptkey
{
get{return decryptkey;}
set{decryptkey=value;}
}
/// <summary>
/// 错误信息
/// </summary>
public string notemessage
{
get{return notemessage;}
set{notemessage=value;}
}
#endregion
#region 构造函数
public desencryptor()
{
//
// todo: 在此处添加构造函数逻辑
//
}
#endregion
#region des加密字符串
/// <summary>
/// 加密字符串
/// 注意:密钥必须为8位
/// </summary>
/// <param name="strtext">字符串</param>
/// <param name="encryptkey">密钥</param>
public void desencrypt()
{
byte[] bykey=null;
byte[] iv= {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
try
{
bykey = system.text.encoding.utf8.getbytes(this.encryptkey.substring(0,8));
descryptoserviceprovider des = new descryptoserviceprovider();
byte[] inputbytearray = encoding.utf8.getbytes(this.inputstring);
memorystream ms = new memorystream();
cryptostream cs = new cryptostream(ms, des.createencryptor(bykey, iv), cryptostreammode.write) ;
cs.write(inputbytearray, 0, inputbytearray.length);
cs.flushfinalblock();
this.outstring=convert.tobase64string(ms.toarray());
}
catch(system.exception error)
{
this.notemessage=error.message;
}
}
#endregion
#region des解密字符串
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="this.inputstring">加了密的字符串</param>
/// <param name="decryptkey">密钥</param>
public void desdecrypt()
{
byte[] bykey = null;
byte[] iv= {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
byte[] inputbytearray = new byte[this.inputstring.length];
try
{
bykey = system.text.encoding.utf8.getbytes(decryptkey.substring(0,8));
descryptoserviceprovider des = new descryptoserviceprovider();
inputbytearray = convert.frombase64string(this.inputstring);
memorystream ms = new memorystream();
cryptostream cs = new cryptostream(ms, des.createdecryptor(bykey, iv), cryptostreammode.write);
cs.write(inputbytearray, 0, inputbytearray.length);
cs.flushfinalblock();
system.text.encoding encoding = new system.text.utf8encoding();
this.outstring=encoding.getstring(ms.toarray());
}
catch(system.exception error)
{
this.notemessage=error.message;
}
}
#endregion
#region des加密文件
/// <summary>
/// des加密文件
/// </summary>
/// <param name="this.inputfilepath">源文件路径</param>
/// <param name="this.outfilepath">输出文件路径</param>
/// <param name="encryptkey">密钥</param>
public void filedesencrypt()
{
byte[] bykey=null;
byte[] iv= {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
try
{
bykey = system.text.encoding.utf8.getbytes(this.encryptkey.substring(0,8));
filestream fin = new filestream(this.inputfilepath, filemode.open, fileaccess.read);
filestream fout = new filestream(this.outfilepath, filemode.openorcreate, fileaccess.write);
fout.setlength(0);
//create variables to help with read and write.
byte[] bin = new byte[100]; //this is intermediate storage for the encryption.
long rdlen = 0; //this is the total number of bytes written.
long totlen = fin.length; //this is the total length of the input file.
int len; //this is the number of bytes to be written at a time.
des des = new descryptoserviceprovider();
cryptostream encstream = new cryptostream(fout, des.createencryptor(bykey, iv), cryptostreammode.write);


//read from the input file, then encrypt and write to the output file.
while(rdlen < totlen)
{
len = fin.read(bin, 0, 100);
encstream.write(bin, 0, len);
rdlen = rdlen + len;
}

encstream.close();
fout.close();
fin.close();


}
catch(system.exception error)
{
this.notemessage=error.message.tostring();

}
}
#endregion
#region des解密文件
/// <summary>
/// 解密文件
/// </summary>
/// <param name="this.inputfilepath">加密了的文件路径</param>
/// <param name="this.outfilepath">输出文件路径</param>
/// <param name="decryptkey">密钥</param>
public void filedesdecrypt()
{
byte[] bykey = null;
byte[] iv= {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
try
{
bykey = system.text.encoding.utf8.getbytes(decryptkey.substring(0,8));
filestream fin = new filestream(this.inputfilepath, filemode.open, fileaccess.read);
filestream fout = new filestream(this.outfilepath, filemode.openorcreate, fileaccess.write);
fout.setlength(0);
//create variables to help with read and write.
byte[] bin = new byte[100]; //this is intermediate storage for the encryption.
long rdlen = 0; //this is the total number of bytes written.
long totlen = fin.length; //this is the total length of the input file.
int len; //this is the number of bytes to be written at a time.
des des = new descryptoserviceprovider();
cryptostream encstream = new cryptostream(fout, des.createdecryptor(bykey, iv), cryptostreammode.write);


//read from the input file, then encrypt and write to the output file.
while(rdlen < totlen)
{
len = fin.read(bin, 0, 100);
encstream.write(bin, 0, len);
rdlen = rdlen + len;
}

encstream.close();
fout.close();
fin.close();
}
catch(system.exception error)
{
this.notemessage=error.message.tostring();
}
}
#endregion
#region md5
/// <summary>
/// md5 encrypt
/// </summary>
/// <param name="strtext">text</param>
/// <returns>md5 encrypt string</returns>
public void md5encrypt()
{
md5 md5 = new md5cryptoserviceprovider();
byte[] result = md5.computehash(system.text.encoding.default.getbytes(this.inputstring));
this.outstring=system.text.encoding.default.getstring(result);
}
#endregion

}
}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表