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

C# 密码的加密, 解密

2009-07-20 13:37 615 查看
using System;

namespace Temp.Console
{
/// <summary>
/// 加密及解密算法
/// </summary>
public class Password
{
public Password() { }

//加密
public static string Encrypt(string password)
{
Encrypt6(ref password);
return password.Trim();
}

//解密
public static string UnEncrypt(string password)
{
UnEncrypt6(ref password);
return password.Trim();
}

/// <summary>
/// 密码加密的倒数第一种算法
/// </summary>
/// <param name="password">密码</param>
private static void Encrypt6(ref string password)
{
string[] pwd = EncryptSubstring(password);
EncryptTransfer(ref pwd);
for (int i = 0; i < pwd.Length; i++)
{
pwd[i] = ((int)char.Parse(pwd[i])).ToString();
}
password = "";
for (int i = 0; i < pwd.Length; i++)
{
password += "|" + pwd[i];
}
Encrypt5(ref password);
}

/// <summary>
/// 解密的第一种算法
/// </summary>
/// <param name="password">密码</param>
private static void UnEncrypt6(ref string password)
{
UnEncrypt5(ref password);
string[] pwds = password.Split(new char[] { '|' });
string[] pwd = new string[pwds.Length - 1];
for (int i = 0, j = 0; i < pwds.Length; i++)
{
if (!pwds[i].Trim().Equals(""))
{
pwd[j] = pwds[i];
j++;
}
}
UnEncryptTransfer(ref pwd);
for (int i = 0; i < pwd.Length; i++)
{
int num = int.Parse(pwd[i]);
pwd[i] = ((char)(num)).ToString();
}
password = "";
for (int i = 0; i < pwd.Length; i++)
{
password += pwd[i];
}
}

/// <summary>
/// 加密的第二种算法
/// </summary>
/// <param name="password">密码</param>
private static void Encrypt5(ref string password)
{
string[] pwd = EncryptSubstring(password);
EncryptTransfer(ref pwd);

EncryptChT(ref pwd);

password = "";
for (int i = 0; i < pwd.Length; i++)
{
password += pwd[i];
}
}

/// <summary>
/// 解密的第二种算法
/// </summary>
/// <param name="password">密码</param>
private static void UnEncrypt5(ref string password)
{
string[] pwd = EncryptSubstring(password);
UnEncryptTransfer(ref pwd);

EncryptChT(ref pwd);

password = "";
for (int i = 0; i < pwd.Length; i++)
{
password += pwd[i];
}
}

/// <summary>
/// 解密公共算法
/// </summary>
/// <param name="pwd">密码</param>
private static void UnEncryptTransfer(ref string[] pwd)
{
Encrypt3(ref pwd);
Encrypt4(ref pwd);
Encrypt1(ref pwd);
Encrypt2(ref pwd);
UnEncrypt4(ref pwd);
UnEncrypt3(ref pwd);
UnEncrypt2(ref pwd);
UnEncrypt1(ref pwd);
}

/// <summary>
/// 加密公共算法
/// </summary>
/// <param name="pwd">密码</param>
private static void EncryptTransfer(ref string[] pwd)
{
Encrypt1(ref pwd);
Encrypt2(ref pwd);
Encrypt3(ref pwd);
Encrypt4(ref pwd);
UnEncrypt2(ref pwd);
UnEncrypt1(ref pwd);
UnEncrypt4(ref pwd);
UnEncrypt3(ref pwd);
}

/// <summary>
/// 通用算法(将字符串变成数组)
/// </summary>
/// <param name="password">密码字符串</param>
/// <returns>密码数组</returns>
private static string[] EncryptSubstring(string password)
{
password = password.Trim();
string[] pwd = new string[password.Length];
for (int i = 0; i < password.Length; i++)
{
string aa = password.Substring(i, 1);
pwd[i] = aa;
}
return pwd;
}

#region 算法

//算法1
private static void Encrypt1(ref string[] pwd)
{

for (int i = 0, j = (pwd.Length - 2); i < pwd.Length; i++, j--)
{
EncryptsAlgorithm(ref pwd, j, i);
if (i >= j)
{
break;
}
}
}
//算法2
private static void Encrypt2(ref string[] pwd)
{
for (int i = 0, j = (pwd.Length - 1); i < pwd.Length; i++, j--)
{
EncryptsAlgorithm(ref pwd, j, i);
if (i >= j)
{
break;
}
}
}
//算法3
private static void Encrypt3(ref string[] pwd)
{
for (int i = 0, j = (pwd.Length / 2); i < pwd.Length / 2; i++, j--)
{
EncryptsAlgorithm(ref pwd, j, i);
}
}
//算法4
private static void Encrypt4(ref string[] pwd)
{
for (int i = pwd.Length / 2, j = pwd.Length - 1; i < pwd.Length / 2; i++, j--)
{
EncryptsAlgorithm(ref pwd, j, i);
}
}
//算法5
private static void UnEncrypt4(ref string[] pwd)
{
for (int i = pwd.Length / 2, j = pwd.Length - 1; i < pwd.Length / 2; i++, j--)
{
EncryptsAlgorithm(ref pwd, i, j);
}
}
//算法6
private static void UnEncrypt3(ref string[] pwd)
{
for (int i = 0, j = pwd.Length / 2; i < pwd.Length / 2; i++, j--)
{
EncryptsAlgorithm(ref pwd, i, j);
}
}
//算法7
private static void UnEncrypt2(ref string[] pwd)
{
for (int i = 0, j = pwd.Length - 1; i < pwd.Length; i++, j--)
{
EncryptsAlgorithm(ref pwd, i, j);
if (i >= j)
{
break;
}
}
}
//算法8
private static void UnEncrypt1(ref string[] pwd)
{
for (int i = 0, j = pwd.Length - 2; i < pwd.Length; i++, j--)
{
EncryptsAlgorithm(ref pwd, i, j);
if (i >= j)
{
break;
}
}
}
//算法(公共方法)
private static void EncryptsAlgorithm(ref string[] pwd, int i, int j)
{
string password = pwd[j];
pwd[j] = pwd[i];
pwd[i] = password;
}
/// <summary>
/// 加密切换
/// </summary>
/// <param name="pwd">密码</param>
private static void EncryptChT(ref string[] pwd)
{
for (int i = 0; i < pwd.Length; i++)
{
EncryptChange(ref pwd, i);
}
}

/// <summary>
/// 切换
/// </summary>
/// <param name="pwd">密码数组引用</param>
/// <param name="i">索引</param>
private static void EncryptChange(ref string[] pwd, int i)
{
switch (pwd[i].Trim())
{
case "1":
pwd[i] = "!";
break;
case "!":
pwd[i] = "1";
break;
case "2":
pwd[i] = "@";
break;
case "@":
pwd[i] = "2";
break;
case "3":
pwd[i] = "#";
break;
case "#":
pwd[i] = "3";
break;
case "4":
pwd[i] = "$";
break;
case "$":
pwd[i] = "4";
break;
case "5":
pwd[i] = "%";
break;
case "%":
pwd[i] = "5";
break;
case "6":
pwd[i] = "^";
break;
case "^":
pwd[i] = "6";
break;
case "7":
pwd[i] = "&";
break;
case "&":
pwd[i] = "7";
break;
case "8":
pwd[i] = "*";
break;
case "*":
pwd[i] = "8";
break;
case "9":
pwd[i] = "?";
break;
case "?":
pwd[i] = "9";
break;
case "0":
pwd[i] = "<";
break;
case "<":
pwd[i] = "0";
break;
}
}
#endregion
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐