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

C#加密解密方法,C#一个加密解密的方法,字符串加密算法

2010-04-22 09:48 471 查看
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;
}
}

}
}

C#一个加密解密的方法

using System;

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

namespace EncryptionDecryption
{
///
/// 加密解密
///
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;
}
}

public class test
{
public static void aa()
{
EncryptionDecryption inter = new EncryptionDecryption();
Console.WriteLine(((IBindesh)inter).encode("aa"));
System.Console.ReadLine();
}
}
}

/*************************字符串加密算法***********************/
public string EncryptString(string str)
{
char[] Base64Code=new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9','+','/','='};
byte empty=(byte)0;
System.Collections.ArrayList byteMessage=new System.Collections.ArrayList(System.Text.Encoding.Default.GetBytes(str));
System.Text.StringBuilder outmessage;
int messageLen=byteMessage.Count;
int page=messageLen/3;
int use=0;
if((use=messageLen%3)>0)
{
for(int i=0;i<3-use;i++)
byteMessage.Add(empty);
page++;
}
outmessage=new System.Text.StringBuilder(page*4);
for(int i=0;i<page;i++)
{
byte[] instr = new byte[3];
instr[0]=(byte)byteMessage[i*3];
instr[1]=(byte)byteMessage[i*3+1];
instr[2]=(byte)byteMessage[i*3+2];
int[] outstr=new int[4];
outstr[0]=instr[0]>>2;

outstr[1]=((instr[0]&0x03)<<4)^(instr[1]>>4);
if(!instr[1].Equals(empty))
outstr[2]=((instr[1]&0x0f)<<2)^(instr[2]>>6);
else
outstr[2]=64;
if(!instr[2].Equals(empty))
outstr[3]=(instr[2]&0x3f);
else
outstr[3]=64;
outmessage.Append(Base64Code[outstr[0]]);
outmessage.Append(Base64Code[outstr[1]]);
outmessage.Append(Base64Code[outstr[2]]);
outmessage.Append(Base64Code[outstr[3]]);
}
return outmessage.ToString();
}
/**************************************************字符串解密算法**************************************************/
public string DecryptString(string str)
{
if((str.Length%4)!=0)
{
throw new ArgumentException("不是正确的BASE64编码,请检查。","str");
}
if(!System.Text.RegularExpressions.Regex.IsMatch(str,"^[A-Z0-9/+=]*$",System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
throw new ArgumentException("包含不正确的BASE64编码,请检查。","str");
}
string Base64Code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=";
int page=str.Length/4;
System.Collections.ArrayList outMessage=new System.Collections.ArrayList(page*3);
char[] message=str.ToCharArray();
for(int i=0;i<page;i++)
{
byte[] instr=new byte[4];
instr[0]=(byte)Base64Code.IndexOf(message[i*4]);
instr[1]=(byte)Base64Code.IndexOf(message[i*4+1]);
instr[2]=(byte)Base64Code.IndexOf(message[i*4+2]);
instr[3]=(byte)Base64Code.IndexOf(message[i*4+3]);
byte[] outstr=new byte[3];
outstr[0]=(byte)((instr[0]<<2)^((instr[1]&0x30)>>4));
if(instr[2]!=64)
{
outstr[1]=(byte)((instr[1]<<4)^((instr[2]&0x3c)>>2));
}
else
{
outstr[2]=0;
}
if(instr[3]!=64)
{
outstr[2]=(byte)((instr[2]<<6)^instr[3]);
}
else
{
outstr[2]=0;
}
outMessage.Add(outstr[0]);
if(outstr[1]!=0)
outMessage.Add(outstr[1]);
if(outstr[2]!=0)
outMessage.Add(outstr[2]);
}
byte[] outbyte=(byte[])outMessage.ToArray(Type.GetType("System.Byte"));
return System.Text.Encoding.Default.GetString(outbyte);

}
文件的加密解密说明:

在对文件进行加密解密时,先将文件的内容读取到一个字符串变量中,然后对字符串加密,最后再把加密后的字符串写入到文件中。详见:
文件操作.txt。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: