简单加密与解密和 & | ^ 的应用
2010-06-30 13:16
429 查看
以下是我在学c#时做的一个简单加密和解密例子,主要是熟悉& | ^ 三个符号在c#的使用:
Code:
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
Code:
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
相关文章推荐
- IO流简单应用(文件加密和解密)
- C# 下简单的进行加密解密问题
- 对文字简单的加密解密
- Windows Phone开发之客户端本地简单填充加密解密
- 简单的加密解密处理
- 简单的文件加密解密
- Cocos2dx网络(一)环境&加密解密
- 使用Beetle.Express简单构建高吞吐的TCP&UDP应用
- 一个简单的加密解密程序
- php简单加密解密代码
- iOS开发:base64简单的加密和解密使用
- Windows中EFS加密及解密应用
- (黑马)总结一:Java 加密解密简单例子
- 简单的内容加密解密,在嵌入式上实现
- php 简单的解密和加密
- 【数据加密】简单加密/解密方法包装
- java加密解密___des的简单实现
- QT文件的转码实现简单加密解密
- Qt对中文文件的简单加密解密
- C++/Qt中一个简单的加密解密程序