以下是我在学c#时做的一个简单加密和解密例子,主要是熟悉& | ^ 三个符号在c#的使用:
- using System;
- class Key
- {
- //加密和解密
- public string setKey(string s_text, string s_key)
- {
- string result = null;
- int k = 0;
- for(int i = 0; i<s_text.Length; i++)
- {
- char ch = s_text[i];
- try{
- ch = (char)(ch ^ s_key[i]);
- }catch(IndexOutOfRangeException)
- {
- ch = (char)(ch ^ k);
- k++;
- }
- result = result + ch;
- }
- return result;
- }
- public static void Main(string[] args)
- {
- Key keyObj = new Key();
- string replay = "y";
- do{
- Console.WriteLine("请选择:A、加密 B、解密");
- string choose = Console.ReadLine();
- if(!choose.Equals("A")&&!choose.Equals("B"))
- {
- Console.WriteLine("你选错了!/n");
- continue;
- }
- if(choose.Equals("A"))
- {
- Console.WriteLine("请输入要加密的原字符串:");
- string s_text = Console.ReadLine();
- Console.WriteLine("请输入密钥字符串:");
- string s_key = Console.ReadLine();
- string txtKey = keyObj.setKey(s_text,s_key);
- Console.WriteLine("加密后:" + txtKey);
- }
- else
- {
- Console.WriteLine("请输入要解密的字符串:");
- string s_text = Console.ReadLine();
- Console.WriteLine("请输入密钥字符串:");
- string s_key = Console.ReadLine();
- string txtKey = keyObj.setKey(s_text,s_key);
- Console.WriteLine("解密后:" + txtKey);
- }
- while(true)
- {
- Console.WriteLine("要继续吗? y:继续 n:退出!");
- replay = Console.ReadLine();
- if(!replay.Equals("y") && !replay.Equals("n"))
- {
- Console.WriteLine("你选错了!");
- }
- else
- {
- break;
- }
- }
- }while(replay.Equals("y"));
- }
- }
把“要加密的字符串”遂一取出字符然后查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