虽然看上去是一次一密,但是可以用一定的分析方法破解,比如每个字符^0~255在找合适的含义~~,下面代码的意义我估计在于,当我们构架n层加密体系的时候始终有可变层存在,比如这里的key可当作私钥,之类的~~,不过在现实应用中发现(char)character这会产生空字符,如果在内存中没啥,但保存下来就可能会丢失,所以如果可能换成16进制的数据可好嘿嘿。
using System.Text; using System.Security.Cryptography; class OTP_XOR { static void Main(string[] args) { Console.Write("Enter plaintext: "); StringBuilder plaintext = new StringBuilder(Console.ReadLine()); RandomNumberGenerator rng = new RNGCryptoServiceProvider(); byte[] key = new Byte[plaintext.ToString().Length]; //--下面这里我修改了下,首先保证非0数据出现其次保证和原始数据相同咯- -看过原文的不要误会哈~~ rng.GetNonZeroBytes(key); StringBuilder ciphertext = EncryptDecrypt(plaintext, key); Console.WriteLine("ciphertext: {0}", ciphertext); StringBuilder recoveredplaintext = EncryptDecrypt(ciphertext, key); Console.WriteLine("recovered plaintext: {0}", recoveredplaintext); Console.Read(); } /**//// <summary> /// 加密函数-可以反复用-这个函数的幽默点就在--^这里由于[原始数据^随机加密数据^随机加密数据=原始数据] /// </summary> /// <param name="data_in"></param> /// <param name="key"></param> /// <returns></returns> static StringBuilder EncryptDecrypt( StringBuilder data_in, byte [] key) { StringBuilder data_oput = new StringBuilder(data_in.ToString()); for (int index=0; index<data_in.Length; index++) { int character = ((int)data_in[index] ^ key[index]); data_oput[index] = (char)character; } return data_oput; } }