예제 #1
0
        static void TestRandomData(string testDataSavePath = null)
        {
            var chars = "abcdefghijklmnopqrstuvwxyz";

            chars += chars.ToUpper() + "0123456789`~!@#$%^&*()_+=-{}[]|:><,.\"'\\?/";
            var validCharBytes   = Encoding.UTF8.GetBytes(chars);
            var codeBook         = CodeBook.InitFromValidChars(validCharBytes);
            var codeBookMetaData = codeBook.GetMetaData();
            var codeBook2        = CodeBook.InitFromMetaData(codeBookMetaData);
            var seeds            = new List <string> {
                "PaladinDu01",
                "PaladinDu02",
                "PaladinDu03",
            };
            var keys = new List <byte[]>();

            foreach (var seed in seeds)
            {
                keys.Add(codeBook.InitSeed(Encoding.UTF8.GetBytes(seed)));
            }
            var testDatas = new List <byte[]>
            {
                Encoding.UTF8.GetBytes("aaaaaaaaaaaaaaaaaaaaaaa"),
                Encoding.UTF8.GetBytes("aaaaaaaaaaaaaaaaaaaaaaab"),
                Encoding.UTF8.GetBytes("aaaaaaaaaaaaaaaaaaaaaaac"),
                Encoding.UTF8.GetBytes("aaaaaaaaaaaaaaaaaaaaaaad")
            };

            for (int i = 0; i < 1000; ++i)
            {
                testDatas.Add(GetRandomBytes(validCharBytes, 20));
            }
            foreach (var testData in testDatas)
            {
                TestData(codeBook, keys[0], testData);
                TestData(codeBook2, keys[0], testData);
            }
            foreach (var key in keys)
            {
                TestData(codeBook, key, testDatas[0]);
            }
            if (testDataSavePath != null)
            {
                var testCases = new List <List <string> >();
                foreach (var testData in testDatas)
                {
                    testCases.Add(new List <string> {
                        Encoding.UTF8.GetString(testData),
                        Encoding.UTF8.GetString(codeBook.Encryption(testData, keys[0]))
                    });
                }
                var json = JsonConvert.SerializeObject(new TestDataInfo
                {
                    meta  = codeBookMetaData,
                    seed  = seeds[0],
                    cases = testCases
                });
                System.IO.File.WriteAllText(testDataSavePath, json);
            }
        }
예제 #2
0
        static void TestByTestData(string testDataPath)
        {
            string text         = System.IO.File.ReadAllText(testDataPath);
            var    testDataInfo = JsonConvert.DeserializeObject <TestDataInfo>(text);
            var    codeBook     = CodeBook.InitFromMetaData(testDataInfo.meta);
            var    key          = codeBook.InitSeed(Encoding.UTF8.GetBytes(testDataInfo.seed));

            foreach (var caseData in testDataInfo.cases)
            {
                var decryptionData = codeBook.Decryption(Encoding.UTF8.GetBytes(caseData[1]), key);
                if (caseData[0].Equals(Encoding.UTF8.GetString(decryptionData)))
                {
                    Console.WriteLine($"decryption success:{caseData[0]},{caseData[1]}");
                }
                else
                {
                    Console.WriteLine($"decryption error:{caseData[0]},{caseData[1]},{Encoding.UTF8.GetString(decryptionData)}");
                }
            }
        }