C# 密码的加密, 解密

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
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值