C#實(shí)現(xiàn)簡易的加密、解密字符串工具類實(shí)例
本文實(shí)例講述了C#實(shí)現(xiàn)簡易的加密、解密字符串工具類。分享給大家供大家參考。具體如下:
這里的類CypherHelper是一個(gè)用于加密、解密字符串的工具類~~~,適合于方便地加密、解密長度較短的密碼等字符串(C#里面已經(jīng)有了庫System.Security.Cryptography,對于比較長的字符串或流來說是一個(gè)更好的選擇)
類CypherHelper代碼:
class CypherHelper
{
/// <summary>
/// 加密字符串
/// </summary>
/// <param name="word">被加密字符串</param>
/// <param name="key">密鑰</param>
/// <returns>加密后字符串</returns>
public static string Encrypt(string word, string key)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(key, "^[a-zA-Z]*$"))
{
throw new Exception("key 必須由字母組成");
}
key = key.ToLower();
//逐個(gè)字符加密字符串
char[] s = word.ToCharArray();
for (int i = 0; i < s.Length; i++)
{
char a = word[i];
char b = key[i % key.Length];
s[i] = EncryptChar(a, b);
}
return new string(s);
}
/// <summary>
/// 加密單個(gè)字符
/// </summary>
/// <param name="a">被加密字符</param>
/// <param name="b">密鑰</param>
/// <returns>加密后字符</returns>
private static char EncryptChar(char a, char b)
{
int c = a + b - 'a';
if (a >= '0' && a <= '9') //字符0-9的轉(zhuǎn)換
{
while (c > '9') c -= 10;
}
else if (a >= 'a' && a <= 'z') //字符a-z的轉(zhuǎn)換
{
while (c > 'z') c -= 26;
}
else if (a >= 'A' && a <= 'Z') //字符A-Z的轉(zhuǎn)換
{
while (c > 'Z') c -= 26;
}
else return a; //不再上面的范圍內(nèi),不轉(zhuǎn)換直接返回
return (char)c; //返回轉(zhuǎn)換后的字符
}
/// <summary>
/// 解密字符串
/// </summary>
/// <param name="word">被解密字符串</param>
/// <param name="key">密鑰</param>
/// <returns>解密后字符串</returns>
public static string Decrypt(string word, string key)
{
if (!System.Text.RegularExpressions.Regex.IsMatch(key, "^[a-zA-Z]*$"))
{
throw new Exception("key 必須由字母組成");
}
key = key.ToLower();
//逐個(gè)字符解密字符串
char[] s = word.ToCharArray();
for (int i = 0; i < s.Length; i++)
{
char a = word[i];
char b = key[i % key.Length];
s[i] = DecryptChar(a, b);
}
return new string(s);
}
/// <summary>
/// 解密單個(gè)字符
/// </summary>
/// <param name="a">被解密字符</param>
/// <param name="b">密鑰</param>
/// <returns>解密后字符</returns>
private static char DecryptChar(char a, char b)
{
int c = a - b + 'a';
if (a >= '0' && a <= '9') //字符0-9的轉(zhuǎn)換
{
while (c < '0') c += 10;
}
else if (a >= 'a' && a <= 'z') //字符a-z的轉(zhuǎn)換
{
while (c < 'a') c += 26;
}
else if (a >= 'A' && a <= 'Z') //字符A-Z的轉(zhuǎn)換
{
while (c < 'A') c += 26;
}
else return a; //不再上面的范圍內(nèi),不轉(zhuǎn)換直接返回
return (char)c; //返回轉(zhuǎn)換后的字符
}
}
Main函數(shù)調(diào)用示例
class Program
{
static void Main(string[] args)
{
//1.加密
string a = CypherHelper.Encrypt("TsybiusLee1234", "Galatea");
Console.WriteLine("加密:TsybiusLee1234 → " + a);
//2.解密
string b = CypherHelper.Decrypt(a, "Galatea");
Console.WriteLine("解密:" + a + " → " + b);
Console.ReadLine();
}
}
運(yùn)行結(jié)果

希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
將c#編寫的程序打包成應(yīng)用程序的實(shí)現(xiàn)步驟分享(安裝,卸載) 圖文
時(shí)常會寫用c#一些程序,但如何將他們和photoshop一樣的大型軟件打成一個(gè)壓縮包,以便于發(fā)布.2011-12-12
c#中利用委托反射將DataTable轉(zhuǎn)換為實(shí)體集的代碼
c#中利用委托反射將DataTable轉(zhuǎn)換為實(shí)體集的代碼,需要的朋友可以參考下2012-10-10

