本文实例讲述了C#实现简易的加密、解密字符串工具类。分享给大家供大家参考。具体如下:
这里的类CypherHelper是一个用于加密、解密字符串的工具类~~~,适合于方便地加密、解密长度较短的密码等字符串(C#里面已经有了库System.Security.Cryptography,对于比较长的字符串或流来说是一个更好的选择)
类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();
//逐个字符加密字符串
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>
/// 加密单个字符
/// </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的转换
{
while (c > \'9\') c -= 10;
}
else if (a >= \'a\' && a <= \'z\') //字符a-z的转换
{
while (c > \'z\') c -= 26;
}
else if (a >= \'A\' && a <= \'Z\') //字符A-Z的转换
{
while (c > \'Z\') c -= 26;
}
else return a; //不再上面的范围内,不转换直接返回
return (char)c; //返回转换后的字符
}
/// <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();
//逐个字符解密字符串
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>
/// 解密单个字符
/// </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的转换
{
while (c < \'0\') c += 10;
}
else if (a >= \'a\' && a <= \'z\') //字符a-z的转换
{
while (c < \'a\') c += 26;
}
else if (a >= \'A\' && a <= \'Z\') //字符A-Z的转换
{
while (c < \'A\') c += 26;
}
else return a; //不再上面的范围内,不转换直接返回
return (char)c; //返回转换后的字符
}
}
Main函数调用示例
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();
}
}
运行结果
希望本文所述对大家的C#程序设计有所帮助。
本文地址:https://www.stayed.cn/item/997
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我