Пример #1
0
        static void MYThread(object obj)
        {
            FileInfo NextFile = (FileInfo)obj;

            if (NextFile.Name.Contains("txt"))
            {
                string[] all_pass = File.ReadAllLines(NextFile.FullName);


                JObject encrypted = JObject.Parse(fixture_old);
                int     ks = 256, iter = 1000, ts = 64;

                JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

                //string key = "12|qwe949461747";

                List <string> base64_pass = new List <string>();

                foreach (string pass in all_pass)
                {
                    Org.BouncyCastle.Crypto.Parameters.KeyParameter new_key = jsonEncrypt.CreateKey(pass.Length + "|" + pass, encrypted);
                    System.Text.Encoding encode = System.Text.Encoding.ASCII;
                    // string strPath = Convert.ToBase64String(new_key.GetKey());
                    base64_pass.Add(pass.Length + "|" + pass + "#" + Convert.ToBase64String(new_key.GetKey()));
                }

                string base64_pass_dir = "./base64_pass/";
                if (!Directory.Exists(base64_pass_dir))
                {
                    Directory.CreateDirectory(base64_pass_dir);
                }

                File.WriteAllLines(base64_pass_dir + NextFile.Name, base64_pass);
            }
        }
Пример #2
0
        public void testDecryption128Macsize()
        {
            string fixture = "{" + "\"key\" : \"user|pass\", " + "\"raw\":{\"one\":\"two\",\"three\":4},"
                             + "\"encrypted\":" + "{" + "\"iv\":\"lgd/ZDGHEZOnbIXpViykXg==\"," + "\"v\":1,"
                             + "\"iter\":1000," + "\"ks\":256," + "\"ts\":128," + "\"mode\":" + "\"ccm\","
                             + "\"adata\":" + "\"wtf%20bbq%3F\"," + "\"cipher\":\"aes\"," + "\"salt\":\"NFPNycJ3ea0=\","
                             + "\"ct\":\"GTvZENQJ97HTZp2UvW1C9Bxf7KBVlfKiOaR82njTMk45L/dP+tEG\"" + "}" + "}";

            JObject parsed    = JObject.Parse(fixture),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted;

            int ks = 256, iter = 1000, ts = 128;

            string key         = parsed.GetValue("key").ToString();
            var    jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("one").ToString(), raw.GetValue("one").ToString());
            Assert.AreEqual(decrypted.GetValue("three").ToObject <int>(), raw.GetValue("three").ToObject <int>());

            string adata = HttpUtility.UrlDecode(encrypted.GetValue("adata").ToString(), Encoding.UTF8);

            Assert.AreEqual("wtf bbq?", adata);
        }
Пример #3
0
        public void testDecryption()
        {
            string fixture = "{\"key\" : \"user|pass\",   \"raw\":{\"one\":\"two\",\"three\":4},"
                             + "\"encrypted\":{\"iv\":\"OPiRt308ZbENmwzdDjffZQ==\"," + "\"v\":1," + "\"iter\":1000,"
                             + "\"ks\":256," + "\"ts\":64," + "\"mode\":\"ccm\"," + "\"adata\":\"\","
                             + "\"cipher\":\"aes\"," + "\"salt\":\"NFPNycJ3ea0=\","
                             + "\"ct\":\"sZo58l4VRX2KR9xAsbP/dIVc9QJ+0VCmTZ3jIMbO1w==\"}}";

            JObject parsed    = JObject.Parse(fixture),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted,
                    reencrypted;

            int ks = 256, iter = 1000, ts = 64;

            JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            string key = parsed["key"].ToString();

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("one").ToString(), raw.GetValue("one").ToString());
            Assert.AreEqual(decrypted.GetValue("three").ToObject <int>(), raw.GetValue("three").ToObject <int>());

            reencrypted = jsonEncrypt.Encrypt(key, parsed.GetValue("raw").ToString(), "", Base64.Decode(encrypted.GetValue("salt").ToString()), Base64.Decode(encrypted.GetValue("iv").ToString()));
            decrypted   = jsonEncrypt.Decrypt(key, reencrypted);

            if (reencrypted["adata"] != null)
            {
                reencrypted["adata"] = "0000" + reencrypted.GetValue("adata");
            }
            else
            {
                reencrypted.Add("adata", "0000" + reencrypted.GetValue("adata"));
            }

            bool thrown = false;

            try
            {
                jsonEncrypt.Decrypt(key, reencrypted);
            }
            catch (InvalidCipherTextException e)
            {
                thrown = true;
            }

            Assert.True(thrown);
        }
Пример #4
0
        static void Main(string[] args)
        {
            JSONEncryptTest test = new JSONEncryptTest();
            int             i    = 1;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
            watch.Start();
            while (i-- > 0)
            {
                //test.testDecryption();
                test.myDecryption();
            }
            watch.Stop();                                                            //停止监视
            TimeSpan timespan = watch.Elapsed;                                       //获取当前实例测量得出的总时间

            Console.WriteLine("打开窗口代码执行时间:(秒)" + timespan.TotalMilliseconds / 1000); //总毫秒数


            //创建密码字典 关系:
            fixture_old = "{\"key\" : \"12|qwe949461747\",   \"raw\":{\"masterkey\":\"shPLmjWXmhpiFd7AFhh2rAmQTVLMj\",\"account_id\":\"r9us1jJnvg9LK9wF1DTUWJc4qpp7GVENm8\",\"contacts\":[],\"created\":\"2017-08-23T19:01:44.475Z\"},"
                          + "\"encrypted\":{\"iv\":\"K0RLqbaVHsUNCEw3B4upNQ==\"," + "\"v\":1," + "\"iter\":1000,"
                          + "\"ks\":256," + "\"ts\":64," + "\"mode\":\"ccm\"," + "\"adata\":\"\","
                          + "\"cipher\":\"aes\"," + "\"salt\":\"5prWye2f3LM=\","
                          + "\"ct\":\"451CMPdT6yvkw2sCXNdl1sHIbeVtAE0eqB9iPkIJlhIFs79JNlF/58tQKagF/60sqqap/7XH4S4gCjARWVh9Dglu3243Lo3MsqJHjRtLNs6h8FZFTrOlbuIwR9Lb9hblXYgyD3DxS6GlbfmBTLLKYhu56QLFNKcA0NCuyesSAr/pNl3O1KBMs7lSDkLXpitDDQxzvQ60v+aTAg==\"}}";

            if (File.Exists("./wallet.txt"))
            {
                fixture_old = File.ReadAllText("./wallet.txt");
                byte[] bpath = Convert.FromBase64String(fixture_old);
                fixture_old = System.Text.ASCIIEncoding.Default.GetString(bpath).Replace("\n", "").Replace(" ", "").Replace("\t", "").Replace("\r", "");
            }
            else
            {
                Console.WriteLine("正在以默认的加密字符串生成字典,不匹配会导致程序崩溃");
            }

            DirectoryInfo TheFolder = new DirectoryInfo("./pass");

            if (!TheFolder.Exists)
            {
                Console.WriteLine("请在程序当前目录创建pass文件夹,并把字典放进目录里面");
                return;
            }


            int join_count = 1;

            foreach (FileInfo NextFile in TheFolder.GetFiles())
            {
                Thread my_thread = new Thread(new ParameterizedThreadStart(MYThread_Parall));
                my_thread.Start(NextFile);

                if (join_count++ % 10 == 0)
                {
                    my_thread.Join();
                }


                if (false)
                {
                    if (NextFile.Name.Contains("txt"))
                    {
                        string[] all_pass = File.ReadAllLines(NextFile.FullName);


                        JObject parsed = JObject.Parse(fixture_old),
                                raw = parsed.GetValue("raw").ToObject <JObject>(),
                                encrypted = parsed.GetValue("encrypted").ToObject <JObject>();
                        int ks = 256, iter = 1000, ts = 64;

                        JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

                        //string key = "12|qwe949461747";

                        List <string> base64_pass = new List <string>();

                        foreach (string pass in all_pass)
                        {
                            Org.BouncyCastle.Crypto.Parameters.KeyParameter new_key = jsonEncrypt.CreateKey(pass.Length + "|" + pass, encrypted);
                            System.Text.Encoding encode = System.Text.Encoding.ASCII;
                            // string strPath = Convert.ToBase64String(new_key.GetKey());
                            base64_pass.Add(pass.Length + "|" + pass + "#" + Convert.ToBase64String(new_key.GetKey()));
                        }

                        string base64_pass_dir = "./base64_pass/";
                        if (!Directory.Exists(base64_pass_dir))
                        {
                            Directory.CreateDirectory(base64_pass_dir);
                        }

                        File.WriteAllLines(base64_pass_dir + NextFile.Name, base64_pass);
                    }
                }
            }

            Console.WriteLine("程序执行完毕,请检查目录中是否生成新的文件");
            Console.ReadKey();
        }
Пример #5
0
        public void myDecryption()
        {
            string fixture_old = "{\"key\" : \"12|qwe949461747\",   \"raw\":{\"masterkey\":\"shPLmjWXmhpiFd7AFhh2rAmQTVLMj\",\"account_id\":\"r9us1jJnvg9LK9wF1DTUWJc4qpp7GVENm8\",\"contacts\":[],\"created\":\"2017-08-23T19:01:44.475Z\"},"
                                 + "\"encrypted\":{\"iv\":\"K0RLqbaVHsUNCEw3B4upNQ==\"," + "\"v\":1," + "\"iter\":1000,"
                                 + "\"ks\":256," + "\"ts\":64," + "\"mode\":\"ccm\"," + "\"adata\":\"\","
                                 + "\"cipher\":\"aes\"," + "\"salt\":\"5prWye2f3LM=\","
                                 + "\"ct\":\"451CMPdT6yvkw2sCXNdl1sHIbeVtAE0eqB9iPkIJlhIFs79JNlF/58tQKagF/60sqqap/7XH4S4gCjARWVh9Dglu3243Lo3MsqJHjRtLNs6h8FZFTrOlbuIwR9Lb9hblXYgyD3DxS6GlbfmBTLLKYhu56QLFNKcA0NCuyesSAr/pNl3O1KBMs7lSDkLXpitDDQxzvQ60v+aTAg==\"}}";

            string myraw   = "{\"masterkey\":\"shPLmjWXmhpiFd7AFhh2rAmQTVLMj\",\"account_id\":\"r9us1jJnvg9LK9wF1DTUWJc4qpp7GVENm8\",\"contacts\":[],\"created\":\"2017-08-23T19:01:44.475Z\"}";
            string fixture = "{\"iv\":\"K0RLqbaVHsUNCEw3B4upNQ==\","
                             + "\"v\":1,"
                             + "\"iter\":1000,"
                             + "\"ks\":256,"
                             + "\"ts\":64,"
                             + "\"mode\":\"ccm\","
                             + "\"adata\":\"\","
                             + "\"cipher\":\"aes\","
                             + "\"salt\":\"5prWye2f3LM=\","
                             + "\"ct\":\"451CMPdT6yvkw2sCXNdl1sHIbeVtAE0eqB9iPkIJlhIFs79JNlF/58tQKagF/60sqqap/7XH4S4gCjARWVh9Dglu3243Lo3MsqJHjRtLNs6h8FZFTrOlbuIwR9Lb9hblXYgyD3DxS6GlbfmBTLLKYhu56QLFNKcA0NCuyesSAr/pNl3O1KBMs7lSDkLXpitDDQxzvQ60v+aTAg==\"}";

            JObject parsed    = JObject.Parse(fixture_old),
                    raw       = parsed.GetValue("raw").ToObject <JObject>(),
                    encrypted = parsed.GetValue("encrypted").ToObject <JObject>(),
                    decrypted,
                    reencrypted;

            int ks = 256, iter = 1000, ts = 64;

            JsonEncrypt jsonEncrypt = new JsonEncrypt(ks, iter, ts);

            string key = "12|qwe949461747";

            decrypted = jsonEncrypt.Decrypt(key, encrypted);

            Assert.AreEqual(decrypted.GetValue("masterkey").ToString(), raw.GetValue("masterkey").ToString());
            Assert.AreEqual(decrypted.GetValue("account_id").ToString(), raw.GetValue("account_id").ToString());

            reencrypted = jsonEncrypt.Encrypt(key, raw, "");
            reencrypted = jsonEncrypt.Encrypt(key, myraw, "", Base64.Decode(encrypted.GetValue("salt").ToString()), Base64.Decode(encrypted.GetValue("iv").ToString()));

            jsonEncrypt.Decrypt(key, reencrypted);

            if (reencrypted["adata"] != null)
            {
                reencrypted["adata"] = "0000" + reencrypted.GetValue("adata");
            }
            else
            {
                reencrypted.Add("adata", "0000" + reencrypted.GetValue("adata"));
            }

            bool thrown = false;

            try
            {
                jsonEncrypt.Decrypt(key, reencrypted);
            }
            catch (InvalidCipherTextException e)
            {
                thrown = true;
            }

            Assert.True(thrown);
        }