简单加密与解密和 & | ^ 的应用

以下是我在学c#时做的一个简单加密和解密例子,主要是熟悉& | ^ 三个符号在c#的使用:

Code:
  1. using System;   
  2. class Key   
  3. {   
  4.    //加密和解密   
  5.    public string setKey(string s_text, string s_key)   
  6.    {   
  7.       string result = null;   
  8.       int k = 0;   
  9.       for(int i = 0; i<s_text.Length; i++)   
  10.       {   
  11.          char ch = s_text[i];   
  12.          try{   
  13.              ch = (char)(ch ^ s_key[i]);   
  14.          }catch(IndexOutOfRangeException)   
  15.          {   
  16.              ch = (char)(ch ^ k);   
  17.              k++;   
  18.          }   
  19.          result = result + ch;   
  20.       }   
  21.       return result;   
  22.    }   
  23.   
  24.    public static void Main(string[] args)   
  25.    {   
  26.        Key keyObj = new Key();   
  27.        string replay = "y";   
  28.        do{   
  29.           Console.WriteLine("请选择:A、加密  B、解密");   
  30.           string choose = Console.ReadLine();   
  31.           if(!choose.Equals("A")&&!choose.Equals("B"))   
  32.           {   
  33.              Console.WriteLine("你选错了!/n");   
  34.              continue;   
  35.           }   
  36.           if(choose.Equals("A"))   
  37.           {   
  38.              Console.WriteLine("请输入要加密的原字符串:");   
  39.              string s_text = Console.ReadLine();   
  40.              Console.WriteLine("请输入密钥字符串:");   
  41.              string s_key = Console.ReadLine();   
  42.              string txtKey = keyObj.setKey(s_text,s_key);   
  43.              Console.WriteLine("加密后:" + txtKey);   
  44.           }   
  45.           else  
  46.           {   
  47.              Console.WriteLine("请输入要解密的字符串:");   
  48.              string s_text = Console.ReadLine();   
  49.              Console.WriteLine("请输入密钥字符串:");   
  50.              string s_key = Console.ReadLine();   
  51.              string txtKey = keyObj.setKey(s_text,s_key);   
  52.              Console.WriteLine("解密后:" + txtKey);   
  53.           }   
  54.           while(true)   
  55.           {   
  56.              Console.WriteLine("要继续吗? y:继续  n:退出!");   
  57.              replay = Console.ReadLine();   
  58.              if(!replay.Equals("y") && !replay.Equals("n"))   
  59.              {   
  60.                 Console.WriteLine("你选错了!");   
  61.              }   
  62.              else  
  63.              {   
  64.                break;   
  65.              }   
  66.           }   
  67.        }while(replay.Equals("y"));   
  68.    }    
  69. }   
  70.   

把“要加密的字符串”遂一取出字符然后查ascii码表,如“A”查到是“65” ,把"65"转二进制是“01000001”;

把“密钥字符串”同样遂一取出字符然后查ascii码表,如“8"查到是“56”,把"56" 转二进制是“00111000”;

然后把01000001 ^ 00111000运算,运算规则如下:

按位与(&):
都为1时结果为1,否则为0;

按位或(|):
都为0时结果为0,否则为1;

按位异或(^):
相同为0,不同为1。

例:(01000001)^(00111000) = 01111001

把01111001转为十进制为“121”,查ascii码表是y,也就明文"A"通过“8”密钥加密后得到密文“y”,解密同理。

本文是个人原创,如文中有错或你有建议,请留言指出,如要交流请加QQ519870018,如要转载本文,请标明本文出处。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/CpuSheep/archive/2010/06/30/5704302.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值