您的位置:首页 > 编程语言 > C#

c# 加密解密算法 张宇轩

2010-08-28 09:29 423 查看
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;


}


}






}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: