加解密

代码
//加密
static String Encrypt(String pwd) {
DESCryptoServiceProvider desc
= new DESCryptoServiceProvider();//des进行加密
PasswordDeriveBytes db = new PasswordDeriveBytes(pwd, null);//产生key
byte[] key = db.GetBytes(8);
MemoryStream ms
= new MemoryStream();//存储加密后的数据
CryptoStream cs = new CryptoStream(ms,desc.CreateEncryptor(key, key),CryptoStreamMode.Write);
byte[] data = Encoding.Unicode.GetBytes(pwd);//取到密码的字节流
cs.Write(data, 0, data.Length);//进行加密
cs.FlushFinalBlock();
byte[] res = ms.ToArray();//取加密后的数据
return Encoding.Unicode.GetString(res);//转换到字符串返回
}
//解密:
static String Decrypt(String pwd, String data) {
DESCryptoServiceProvider desc
= new DESCryptoServiceProvider();
PasswordDeriveBytes db
= new PasswordDeriveBytes(pwd, null);//产生key
byte[] key = db.GetBytes(8);
MemoryStream ms
= new MemoryStream();//存储解密后的数据
CryptoStream cs = new CryptoStream(ms,desc.CreateDecryptor(key, key),CryptoStreamMode.Write);
byte[] databytes = Encoding.Unicode.GetBytes(data);//取到加密后的数据的字节流
cs.Write(databytes, 0, databytes.Length);//解密数据
cs.FlushFinalBlock();
byte[] res = ms.ToArray();
return Encoding.Unicode.GetString(res);//返回解密后的数据
}
//1、方法一 (不可逆加密)



public string EncryptPassword(string PasswordString,string PasswordFormat )
{
string encryptPassword = null;
if (PasswordFormat="SHA1"){
encryptPassword
=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString

,
"SHA1");
}
elseif (PasswordFormat
="MD5")
{ encryptPassword
=FormsAuthortication.HashPasswordForStoringInConfigFile(PasswordString

,
"MD5");
}
return encryptPassword ;
}

//2、方法二 (可逆加密)


public interface IBindesh
{
string encode(string str);
string decode(string str);
}

public class EncryptionDecryption : IBindesh
{
public string encode(string str)
{
string htext = "";

for ( int i = 0; i < str.Length; i++)
{
htext
= htext + (char) (str[i] + 10 - 1 * 2);
}
return htext;
}

public string decode(string str)
{
string dtext = "";

for ( int i=0; i < str.Length; i++)
{
dtext
= dtext + (char) (str[i] - 10 + 1*2);
}
return dtext;
}


//3、方法三 (可逆加密)



const string KEY_64 = "VavicApp";//注意了,是8个字符,64位

const string IV_64 = "VavicApp";
public string Encode(string data)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

DESCryptoServiceProvider cryptoProvider
= new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms
= new MemoryStream();
CryptoStream cst
= new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey,

byIV), CryptoStreamMode.Write);

StreamWriter sw
= new StreamWriter(cst);
sw.Write(data);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);

}

public string Decode(string data)
{
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);

byte[] byEnc;
try
{
byEnc
= Convert.FromBase64String(data);
}
catch
{
return null;
}

DESCryptoServiceProvider cryptoProvider
= new DESCryptoServiceProvider();
MemoryStream ms
= new MemoryStream(byEnc);
CryptoStream cst
= new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey,

byIV), CryptoStreamMode.Read);
StreamReader sr
= new StreamReader(cst);
return sr.ReadToEnd();
}

//4、MD5不可逆加密

(32位加密)

public string GetMD5(string s, string _input_charset)
{

/**//**//**//// <summary>
/// 与ASP兼容的MD5加密算法
/// </summary>

MD5 md5
= new MD5CryptoServiceProvider();
byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_charset).GetBytes(s));
StringBuilder sb
= new StringBuilder(32);
for (int i = 0; i < t.Length; i++)
{
sb.Append(t[i].ToString(
"x").PadLeft(2, '0'));
}
return sb.ToString();
}
// (16位加密)


public static string GetMd5Str(string ConvertString)
{
MD5CryptoServiceProvider md5
= new MD5CryptoServiceProvider();
string t2 =

BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)),
4, 8);
t2
= t2.Replace("-", "");
return t2;
}

//5、加解文本文件


//加密文件
private static void EncryptData(String inName, String outName, byte[] desKey, byte[]

desIV)
{
//Create the file streams to handle the input and output files.
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout
= new FileStream(outName, 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(desKey, desIV),

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

//解密文件
private static void DecryptData(String inName, String outName, byte[] desKey, byte[]

desIV)
{
//Create the file streams to handle the input and output files.
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout
= new FileStream(outName, 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(desKey, desIV),

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

//6、

using System;
using System.Collections.Generic;
using System.Text;
using System.Security.Cryptography;
using System.IO;

namespace Component
{
public class Security
{
public Security()
{

}

//默认密钥向量
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
/**//**//**//**//**//**//**//// <summary>
/// DES加密字符串
/// </summary>
/// <param name="encryptString">待加密的字符串</param>
/// <param name="encryptKey">加密密钥,要求为8位</param>
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>
public static string EncryptDES(string encryptString, string encryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
byte[] rgbIV = Keys;
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP
= new DESCryptoServiceProvider();
MemoryStream mStream
= new MemoryStream();
CryptoStream cStream
= new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,
rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray,
0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}
catch
{
return encryptString;
}
}

/**//**//**//**//**//**//**//// <summary>
/// DES解密字符串
/// </summary>
/// <param name="decryptString">待解密的字符串</param>
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>
public static string DecryptDES(string decryptString, string decryptKey)
{
try
{
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] rgbIV = Keys;
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP
= new DESCryptoServiceProvider();
MemoryStream mStream
= new MemoryStream();
CryptoStream cStream
= new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey,

rgbIV), CryptoStreamMode.Write);
cStream.Write(inputByteArray,
0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch
{
return decryptString;
}
}


}
}

 

posted @ 2010-04-17 21:46  Mark_ybh  阅读(292)  评论(2编辑  收藏  举报