简单的加密解密处理
今天一位小朋友通过邮箱向我发送一封求助信息。
内容大致如下:
您好!之前您写的那个C#客户端服务器程序运行成功,但能不能加上一个加密解密的函数,老师要求客户端/服务器模式,可以在局域网内传送字符文本消息,要求不能使用明文,有成对的加密/解密处理.您能帮我解决一下吗?谢谢
他问的这个C#客户端我还真的忘记是什么了,后来看了看才明白是我之前做过的一个Socket通讯测试。
其实加密解密原理算是比较简单的,只要把简单原理用复杂结构支撑,那么这种加密就是无法破解,我先展示一下加码前后的效果
我的加密解密过程非常简单,如果对加密解密不懂的同学,可以用这篇来理解加密和解密过程
提示一下,我的加密就是按照每字节(byte) +7后取反;这个加密过程可以用复杂函数方程表示,但是要确保函数方程在有效范围内(byte : 0~255)不能出现多解的情况,函数方程求解要确保唯一性。
代码奉送:
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace StreamTest 9 { 10 class Program 11 { 12 static void Main(string[] args) 13 { 14 string sendMsg = "A:告诉我你叫什么名字?\nB:我叫墨\nA:你的梦想是什么呢?!@#¥%……&*()——+\nB:建造一套完备的智能集群监控系统,规则自动内建、程序自我编程、自我热替换 :\"?><=-\nA:(白眼 这人神经病了)呵呵,谢谢你的回答\n"; 15 16 Console.WriteLine("原字符串 --> {0}\n", sendMsg); 17 18 Console.WriteLine("开始加密"); 19 byte[] buffer = Encrypt(sendMsg); 20 Console.WriteLine("加密完成\n"); 21 22 Console.WriteLine("开始解密"); 23 string decMsg = Decrypt(buffer); 24 Console.WriteLine("解密完成\n"); 25 26 Console.WriteLine("解密字符串 --> {0}\n", decMsg); 27 28 Console.ReadKey(); 29 } 30 /// <summary> 31 /// 加密 32 /// </summary> 33 /// <param name="send"></param> 34 /// <returns></returns> 35 private static byte[] Encrypt(string send) 36 { 37 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(send); 38 int len = buffer.Length; 39 for (int i = 0; i < len; i++) 40 { 41 buffer[i] = (byte)(~((buffer[i] + 7) % 256)); 42 } 43 return buffer; 44 } 45 /// <summary> 46 /// 解密 47 /// </summary> 48 /// <param name="buffer"></param> 49 /// <returns></returns> 50 private static string Decrypt(byte[] buffer) 51 { 52 int len = buffer.Length; 53 for (int i = 0; i < len; i++) 54 { 55 buffer[i] = (byte)((~buffer[i] - 7)%256); 56 } 57 return System.Text.Encoding.UTF8.GetString(buffer); 58 } 59 } 60 }
我的测试程序:
MMSClient(新).7z http://pan.baidu.com/s/1dFKijPf