示例#1
0
        internal void Decrypt_Data <ED>(ref ED encrytedData, ref SafeData safeData) where ED : IRequest
        {
            string desDecrypted = string.Empty;

            using (RSAHelper rsa = new RSAHelper(RSAType.RSA2, Encoding.UTF8, Globals.key_private, Globals.key_public)) {
                desDecrypted = rsa.Decrypt(safeData.Des);
            }

            using (RSAHelper rsa_partner = new RSAHelper(RSAType.RSA2, Encoding.UTF8, Globals.key_private, apiUser.PublicKey)) {
                if (rsa_partner.Verify(desDecrypted, safeData.Signature) == false)
                {
                    throw new ApiException(CodeStatus.Signature_Not_Valid);
                }
            }

            using (DESParameters desParameters = JsonConvert.DeserializeObject <DESParameters>(desDecrypted)) {
                TripleDESHelper des     = new TripleDESHelper(desParameters);
                string          message = des.Decrypt(safeData.Data);
                encrytedData    = JsonConvert.DeserializeObject <ED>(message);
                request.User_ID = apiUser.User_ID;
                encrytedData.SetBase(request);
            }

            chainLogger.Step(Tool.GetCurrentMethod());
            Access_Authorization();
            Save_Request();
        }
示例#2
0
        internal SafeData Encrypt_Data <DD>(DD decryted_data) where DD : class
        {
            TripleDESHelper des = new TripleDESHelper();

            using (RSAHelper rsa_partner = new RSAHelper(RSAType.RSA2, Encoding.UTF8, Globals.key_private, apiUser.PublicKey)) {
                response = JsonConvert.SerializeObject(decryted_data);
#if DEBUG
                Console.Out.WriteLine(response);
#endif
                string encryptedStr = des.Encrypt(response);

                string desPrms      = des.GetParameters();
                string desEncrypted = rsa_partner.Encrypt(desPrms);
                string signStr      = rsa_partner.Sign(desPrms);
                bool   signVerify   = false;

                using (RSAHelper rsa = new RSAHelper(RSAType.RSA2, Encoding.UTF8, Globals.key_private, Globals.key_public)) {
                    signVerify = rsa.Verify(desPrms, signStr);
                }

                using (SafeData sd = new SafeData()) {
                    sd.Data      = encryptedStr;
                    sd.Signature = signStr;
                    sd.Des       = desEncrypted;

                    chainLogger.Step(Tool.GetCurrentMethod());
                    return(sd);
                }
            }
        }
示例#3
0
        private byte[] decrypt3DES(byte[] item1, string masterPwd, byte[] entrySalt, byte[] cipherT)
        {
            try
            {
                var sha1 = SHA1.Create("sha1");
                var hp   = sha1.ComputeHash(item1);
                Array.Resize(ref hp, 40);
                Array.Copy(entrySalt, 0, hp, 20, 20);

                var pes = entrySalt.Concat(Enumerable.Range(1, 20 - entrySalt.Length).Select(b => (byte)0).ToArray()).ToArray();
                Array.Resize(ref pes, 40);
                Array.Copy(entrySalt, 0, pes, 20, 20);
                var chp  = sha1.ComputeHash(hp);
                var hmac = HMACSHA1.Create();
                hmac.Key = chp;
                var k1 = hmac.ComputeHash(pes);
                Array.Resize(ref pes, 20);

                var tk = hmac.ComputeHash(pes);
                Array.Resize(ref tk, 40);
                Array.Copy(entrySalt, 0, tk, 20, 20);
                var k2 = hmac.ComputeHash(tk);
                Array.Resize(ref k1, 40);
                Array.Copy(k2, 0, k1, 20, 20);
                var iv  = k1.Skip(k1.Length - 8).ToArray();
                var key = k1.Take(24).ToArray();
                return(TripleDESHelper.DESCBCDecryptorByte(key, iv, cipherT).Take(24).ToArray());
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
示例#4
0
        public static HttpResponseMessage GetResponse(dynamic request, IHeaderDictionary headers,
                                                      HttpMethod httpMethod, PathString path)
        {
            ApiSafeData CriptoSafeData = new ApiSafeData()
            {
                Data      = TripleDESHelper.Encrypt(JsonSerializer.Serialize(request), out string desParameters),
                Des       = RSAHelper.Encrypt(desParameters, Env.RfiPublicKey),
                Signature = RSAHelper.Sign(desParameters, Env.PartnerPrivateKey)
            };

            if (String.IsNullOrEmpty(Env.CertificateFilePath))
            {
                using (var clientHandler = new HttpClientHandler()
                {
                    ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return(true); }
                })
                {
                    return(Resend(headers, httpMethod, clientHandler, CriptoSafeData, path));
                }
            }
            else
            {
                using (var clientHandler = new HttpClientHandler
                {
                    ClientCertificateOptions = ClientCertificateOption.Manual,
                    SslProtocols = SslProtocols.Tls12,
                    ClientCertificates = { new X509Certificate2(Env.CertificateFilePath) }
                })
                {
                    return(Resend(headers, httpMethod, clientHandler, CriptoSafeData, path));
                }
            }
        }
 // Token: 0x060000E8 RID: 232 RVA: 0x00007314 File Offset: 0x00005514
 private static byte[] ExtractPrivateKey4(string file)
 {
     byte[] array = new byte[24];
     try
     {
         Console.WriteLine("Key source file: " + file);
         if (!File.Exists(file))
         {
             Console.WriteLine("Source file UNKNOWN");
             return(array);
         }
         SQLiteManager sqliteManager = new SQLiteManager(file);
         sqliteManager.ReadTable("metaData");
         string        value         = sqliteManager.GetValue(0, "item1");
         string        value2        = sqliteManager.GetValue(0, "item2)");
         Asn1DerObject asn1DerObject = new Asn1Der().Parse(Encoding.Default.GetBytes(value2));
         byte[]        data          = asn1DerObject.objects[0].objects[0].objects[1].objects[0].Data;
         byte[]        data2         = asn1DerObject.objects[0].objects[1].Data;
         MozillaPBE    mozillaPBE    = new MozillaPBE(Encoding.Default.GetBytes(value), Encoding.Default.GetBytes(string.Empty), data);
         mozillaPBE.Compute();
         string input = TripleDESHelper.DESCBCDecryptor(mozillaPBE.Key, mozillaPBE.IV, data2, PaddingMode.None);
         Console.WriteLine(new string('=', 20));
         Console.WriteLine("Global salt found for encrypt: [" + FirefoxBase.CalcHex(value) + "]");
         Console.WriteLine("Entry salt found for encrypt: [" + FirefoxBase.CalcHex(data) + "]");
         Console.WriteLine("СheckPwd key for encrypt : [" + FirefoxBase.CalcHex(mozillaPBE.Key) + "]");
         Console.WriteLine("СheckPwd IV for encrypt: [" + FirefoxBase.CalcHex(mozillaPBE.IV) + "]");
         Console.WriteLine("Decrypted chiper: [" + FirefoxBase.CalcHex(input) + "]");
         Console.WriteLine(new string('=', 20));
         sqliteManager.ReadTable("nssPrivate");
         int    rowCount = sqliteManager.GetRowCount();
         string s        = string.Empty;
         for (int i = 0; i < rowCount; i++)
         {
             if (sqliteManager.GetValue(i, "a102") == Encoding.Default.GetString(FirefoxBase.MagicNumber1))
             {
                 s = sqliteManager.GetValue(i, "a11");
                 break;
             }
         }
         Asn1DerObject asn1DerObject2 = new Asn1Der().Parse(Encoding.Default.GetBytes(s));
         data       = asn1DerObject2.objects[0].objects[0].objects[1].objects[0].Data;
         data2      = asn1DerObject2.objects[0].objects[1].Data;
         mozillaPBE = new MozillaPBE(Encoding.Default.GetBytes(value), Encoding.Default.GetBytes(string.Empty), data);
         mozillaPBE.Compute();
         Console.WriteLine(new string('=', 20));
         Console.WriteLine("ChiperT found after encrypt: [" + FirefoxBase.CalcHex(data2) + "]");
         Console.WriteLine("Global salt found after encrypt: [" + FirefoxBase.CalcHex(value) + "]");
         Console.WriteLine("Entry salt found after encrypt: [" + FirefoxBase.CalcHex(data) + "]");
         Console.WriteLine("СheckPwd key after encrypt : [" + FirefoxBase.CalcHex(mozillaPBE.Key) + "]");
         Console.WriteLine("СheckPwd IV after encrypt: [" + FirefoxBase.CalcHex(mozillaPBE.IV) + "]");
         array = Encoding.Default.GetBytes(TripleDESHelper.DESCBCDecryptor(mozillaPBE.Key, mozillaPBE.IV, data2, PaddingMode.PKCS7));
         Console.WriteLine("Decrypted private key: [" + FirefoxBase.CalcHex(array) + "]");
         Console.WriteLine(new string('=', 20));
     }
     catch (Exception value3)
     {
         Console.WriteLine(value3);
     }
     return(array);
 }
示例#6
0
        private string EncryptAuthState(AuthOrderDto order, CreateAuthOrderInput input)
        {
            var state       = $"{order.Id}_{input.AuthState}_{DateTime.Now.ToString("fff")}";
            var encryptData = TripleDESHelper.Encrypt(Encoding.UTF8.GetBytes(state), this._appSettings.GetTripleDESKeyData(), null, CipherMode.ECB, PaddingMode.PKCS7);

            return(MD5Helper.ConvertToString(encryptData));
        }
示例#7
0
        private static List <LoginPair> ParseLogins(string profile, byte[] privateKey)
        {
            List <LoginPair> loginPairList = new List <LoginPair>();

            try
            {
                string tempCopy = DecryptHelper.CreateTempCopy(Path.Combine(profile, "logins.json"));
                if (!File.Exists(tempCopy))
                {
                    return(loginPairList);
                }
                foreach (JsonValue jsonValue in (IEnumerable)File.ReadAllText(tempCopy).FromJSON()["logins"])
                {
                    Asn1Object asn1Object1 = Asn1Factory.Create(Convert.FromBase64String(jsonValue["encryptedUsername"].ToString(false)));
                    Asn1Object asn1Object2 = Asn1Factory.Create(Convert.FromBase64String(jsonValue["encryptedPassword"].ToString(false)));
                    string     str1        = Regex.Replace(TripleDESHelper.Decrypt(privateKey, asn1Object1.Objects[0].Objects[1].Objects[1].ObjectData, asn1Object1.Objects[0].Objects[2].ObjectData, PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);
                    string     str2        = Regex.Replace(TripleDESHelper.Decrypt(privateKey, asn1Object2.Objects[0].Objects[1].Objects[1].ObjectData, asn1Object2.Objects[0].Objects[2].ObjectData, PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);
                    LoginPair  loginPair   = new LoginPair()
                    {
                        Host = string.IsNullOrEmpty(jsonValue["hostname"].ToString(false)) ? "UNKNOWN" : jsonValue["hostname"].ToString(false), Login = string.IsNullOrEmpty(str1) ? "UNKNOWN" : str1, Password = string.IsNullOrEmpty(str2) ? "UNKNOWN" : str2
                    };
                    if (loginPair.Login != "UNKNOWN" && loginPair.Password != "UNKNOWN" && loginPair.Host != "UNKNOWN")
                    {
                        loginPairList.Add(loginPair);
                    }
                }
            }
            catch
            {
            }
            return(loginPairList);
        }
 /// <summary>
 /// 反序列化指定的类
 /// </summary>
 /// <param name="configfilepath">config 文件的路径</param>
 /// <param name="configtype">相应的类型</param>
 /// <returns></returns>
 public static IConfigInfo DeserializeInfo(string configfilepath, Type configtype)
 {
     if (!File.Exists(configfilepath))
     {
         Logger.Error(string.Format("文件[{0}]不存在!", configfilepath));
         return(null);
     }
     if (ShouldEncrypt)
     {
         XmlDocument document = new XmlDocument();
         document.Load(configfilepath);
         if (document.DocumentElement != null && document.DocumentElement.Name == "EncryptContent")
         {
             var configInfo = SerializationHelper.Load <EncryptContent>(configfilepath);
             if (configInfo == null || string.IsNullOrEmpty(configInfo.Content))
             {
                 return(null);
             }
             //机密配置内容
             var content = TripleDESHelper.Decrypt(configInfo.Content);
             return((IConfigInfo)SerializationHelper.Deserialize(configtype, content));
         }
     }
     return((IConfigInfo)SerializationHelper.Load(configtype, configfilepath));
 }
示例#9
0
        public static void Lopos(string profile, byte[] privateKey, string browser_name, string profile_name)
        {
            try
            {
                string path = CreateTempCopy(Path.Combine(profile, "logins.json"));
                if (File.Exists(path))
                {
                    {
                        foreach (JsonValue item in File.ReadAllText(path).FromJSON()["logins"])
                        {
                            GetPasswords.Cpassword++;
                            Asn1DerObject Gecko4  = Asn1Der.Parse(Convert.FromBase64String(item["encryptedUsername"].ToString(saving: false)));
                            Asn1DerObject Gecko42 = Asn1Der.Parse(Convert.FromBase64String(item["encryptedPassword"].ToString(saving: false)));
                            string        text    = Regex.Replace(TripleDESHelper.DESCBCDecryptor(privateKey, Gecko4.Objects[0].Objects[1].Objects[1].GetObjectData(), Gecko4.Objects[0].Objects[2].GetObjectData(), PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);
                            string        text2   = Regex.Replace(TripleDESHelper.DESCBCDecryptor(privateKey, Gecko42.Objects[0].Objects[1].Objects[1].GetObjectData(), Gecko42.Objects[0].Objects[2].GetObjectData(), PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);

                            credential.Add("Site_Url : " + item["hostname"] + Environment.NewLine + "Login : "******"Password : "******"Browser : " + browser_name + Environment.NewLine + "Profile : " + profile_name + Environment.NewLine + credential[i]);
                        }
                        credential.Clear();
                    }
                }
            }
            catch (Exception)
            {
            }
        }
示例#10
0
 private static byte[] GetPrivate3Key(string file)
 {
     byte[] array = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(array);
         }
         new DataTable();
         GeckoDatabase berkeleyDB    = new GeckoDatabase(file);
         PasswordCheck passwordCheck = new PasswordCheck(ParseDb(berkeleyDB, (string x) => x.Equals("password-check")));
         string        hexString     = ParseDb(berkeleyDB, (string x) => x.Equals("global-salt"));
         GeckoPasswordBasedEncryption geckoPasswordBasedEncryption = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(hexString), Encoding.Default.GetBytes(string.Empty), DecryptHelper.ConvertHexStringToByteArray(passwordCheck.EntrySalt));
         geckoPasswordBasedEncryption.Init();
         TripleDESHelper.Decrypt(geckoPasswordBasedEncryption.DataKey, geckoPasswordBasedEncryption.DataIV, DecryptHelper.ConvertHexStringToByteArray(passwordCheck.Passwordcheck));
         Asn1Object asn1Object = Asn1Factory.Create(DecryptHelper.ConvertHexStringToByteArray(ParseDb(berkeleyDB, (string x) => !x.Equals("password-check") && !x.Equals("Version") && !x.Equals("global-salt"))));
         GeckoPasswordBasedEncryption geckoPasswordBasedEncryption2 = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(hexString), Encoding.Default.GetBytes(string.Empty), asn1Object.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData);
         geckoPasswordBasedEncryption2.Init();
         Asn1Object asn1Object2 = Asn1Factory.Create(Asn1Factory.Create(Encoding.Default.GetBytes(TripleDESHelper.Decrypt(geckoPasswordBasedEncryption2.DataKey, geckoPasswordBasedEncryption2.DataIV, asn1Object.Objects[0].Objects[1].ObjectData))).Objects[0].Objects[2].ObjectData);
         if (asn1Object2.Objects[0].Objects[3].ObjectData.Length <= 24)
         {
             array = asn1Object2.Objects[0].Objects[3].ObjectData;
             return(array);
         }
         Array.Copy(asn1Object2.Objects[0].Objects[3].ObjectData, asn1Object2.Objects[0].Objects[3].ObjectData.Length - 24, array, 0, 24);
         return(array);
     }
     catch
     {
         return(array);
     }
 }
        public Dictionary <string, byte[]> Encrypt(byte[] bytesToEncrypt, RSAParameters publicKeyReceiver)
        {
            Dictionary <string, byte[]> output = new Dictionary <string, byte[]>();
            Dictionary <string, byte[]> tdes   = TripleDESHelper.Encrypt(bytesToEncrypt);

            output.Add("text", tdes["text"]);                                                                     //file 1: het origineel geencrypteerd met triple DES. Het gene wat geencrypteerd wordt is text (uit de parameter van deze functie)
            output.Add("key", RsaHelper.Encryption(tdes["key"], publicKeyReceiver, false));                       //File 2: triple des sleutel encrypteren met de public van andere persoon
            output.Add("hash", RsaHelper.SignData(md5helper.GenerateHash(bytesToEncrypt), RsaHelper.PrivateKey)); // file 3: maak een hash en encrypteer die met eigen privé sleutel
            return(output);
        }
示例#12
0
        public static void CreateKeyVector_KeySize_OutOfRange(int keySize)
        {
            // Arrange

            // Act
            Assert.Throws <ArgumentOutOfRangeException>(()
                                                        => TripleDESHelper.CreateKeyVector("test", keySize));

            // Assert
        }
示例#13
0
        public static string DecriptRespose(ApiResponse response)
        {
            string des = RSAHelper.Decrypt(response.Des, Env.PartnerPrivateKey);

            if (!RSAHelper.Verify(des, response.Signature, Env.RfiPublicKey))
            {
                throw new Exception("Signature not valid");
            }

            return(TripleDESHelper.Decrypt(response.Data, des));
        }
示例#14
0
        public static void CreateKeyVector(string key, string iv, int keySize, string passphrase)
        {
            // Arrange

            // Act
            var result = TripleDESHelper.CreateKeyVector(passphrase, keySize);

            // Assert
            Assert.Equal(key, Convert.ToBase64String(result.First));
            Assert.Equal(iv, Convert.ToBase64String(result.Second));
        }
示例#15
0
        public static void CreateDecryptor()
        {
            // Arrange
            var provider = new TripleDESCryptoServiceProvider();

            // Act
            var result = TripleDESHelper.CreateDecryptor(provider, "sdf2qw2@", 128);

            // Assert
            Assert.NotNull(result);
            result.Dispose();
            provider.Clear();
        }
示例#16
0
        public void Test_TripleDESHelper()
        {
            string text   = TripleDESHelper.Encrypt(s_input, s_key);
            string result = TripleDESHelper.Decrypt(text, s_key);

            Assert.AreEqual(s_input, result);


            byte[] b1 = s_input.GetBytes();
            byte[] b2 = TripleDESHelper.Encrypt(b1, s_key);
            byte[] b3 = TripleDESHelper.Decrypt(b2, s_key);
            Assert.IsTrue(ByteTestHelper.AreEqual(b1, b3));
        }
示例#17
0
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="obj">对象</param>
        /// <param name="filename">文件路径</param>
        public virtual bool Save(object obj, string filename)
        {
            if (obj == null)
            {
                return(true);
            }
            FileStream fs = null;

            try
            {
                string data;
                var    elementType   = obj.GetType();
                var    runConfigType = typeof(RunConfig);
                if (elementType != runConfigType && !runConfigType.IsAssignableFrom(elementType))
                {
                    if (RunConfig.Current.EnabledEncrypt)
                    {
                        data = JsonUtils.SerializeObject(obj, Formatting.None);
                        data = TripleDESHelper.Encrypt(data);
                    }
                    else
                    {
                        data = JsonUtils.SerializeObject(obj, Formatting.Indented);
                    }
                }
                else
                {
                    data = JsonUtils.SerializeObject(obj, Formatting.Indented);
                }
                if (string.IsNullOrEmpty(data))
                {
                    return(true);
                }
                var bytes = System.Text.Encoding.UTF8.GetBytes(data);
                fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                fs.Write(bytes, 0, bytes.Length);
            }
            catch (Exception ex)
            {
                Logger.Error(string.Format("JsonFileCacheSerializater.Save Msg:{0} StackTrace:{1} Source:{2} TargetSite:{3}", ex.Message, ex.StackTrace, ex.Source, ex.TargetSite));
                return(false);
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
            }
            return(true);
        }
        public void Encrypt_Decrypt_Test()
        {
            var source      = "helloworld";
            var sourceBytes = Encoding.UTF8.GetBytes(source);
            var key         = "MTIzNDU2Nzg4NzY1NDMyMQ=="; //1234567887654321
            var iv          = "MTIzNDU2Nzg5MGFiY2RlZg=="; //1234567890abcdef

            var keyBytes = Convert.FromBase64String(key);
            var ivBytes  = Convert.FromBase64String(iv);

            var encrypted1 = TripleDESHelper.Encrypt(sourceBytes);
            var decrypted1 = Encoding.UTF8.GetString(TripleDESHelper.Decrypt(encrypted1));

            Assert.Equal(source, decrypted1);
        }
示例#19
0
 // Token: 0x060002CB RID: 715 RVA: 0x0000D09C File Offset: 0x0000B29C
 private static byte[] GetPrivate3Key(string file)
 {
     byte[] array = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(array);
         }
         MethodInfo method = typeof(Array).GetMethod("Copy", new Type[]
         {
             typeof(Array),
             typeof(int),
             typeof(Array),
             typeof(int),
             typeof(int)
         });
         GeckoDatabase berkeleyDB    = new GeckoDatabase(file);
         PasswordCheck passwordCheck = new PasswordCheck(GeckoEngine.ParseDb(berkeleyDB, (string x) => x.Equals("password-check")));
         string        hexString     = GeckoEngine.ParseDb(berkeleyDB, (string x) => x.Equals("global-salt"));
         GeckoPasswordBasedEncryption geckoPasswordBasedEncryption = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(hexString), Encoding.GetEncoding("windows-1251").GetBytes(string.Empty), DecryptHelper.ConvertHexStringToByteArray(passwordCheck.EntrySalt));
         geckoPasswordBasedEncryption.Init();
         TripleDESHelper.Decrypt(geckoPasswordBasedEncryption.DataKey, geckoPasswordBasedEncryption.DataIV, DecryptHelper.ConvertHexStringToByteArray(passwordCheck.Passwordcheck), PaddingMode.None);
         Asn1Object asn1Object = Asn1Factory.Create(DecryptHelper.ConvertHexStringToByteArray(GeckoEngine.ParseDb(berkeleyDB, (string x) => !x.Equals("password-check") && !x.Equals("Version") && !x.Equals("global-salt"))));
         GeckoPasswordBasedEncryption geckoPasswordBasedEncryption2 = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(hexString), Encoding.GetEncoding("windows-1251").GetBytes(string.Empty), asn1Object.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData);
         geckoPasswordBasedEncryption2.Init();
         Asn1Object asn1Object2 = Asn1Factory.Create(Asn1Factory.Create(Encoding.GetEncoding("windows-1251").GetBytes(TripleDESHelper.Decrypt(geckoPasswordBasedEncryption2.DataKey, geckoPasswordBasedEncryption2.DataIV, asn1Object.Objects[0].Objects[1].ObjectData, PaddingMode.None))).Objects[0].Objects[2].ObjectData);
         if (asn1Object2.Objects[0].Objects[3].ObjectData.Length > 24)
         {
             method.Invoke(null, new object[]
             {
                 asn1Object2.Objects[0].Objects[3].ObjectData,
                 asn1Object2.Objects[0].Objects[3].ObjectData.Length - 24,
                 array,
                 0,
                 24
             });
         }
         else
         {
             array = asn1Object2.Objects[0].Objects[3].ObjectData;
         }
     }
     catch
     {
     }
     return(array);
 }
 /// <summary>
 /// 保存(序列化)指定路径下的配置文件
 /// </summary>
 /// <param name="configFilePath">指定的配置文件所在的路径(包括文件名)</param>
 /// <param name="configinfo">被保存(序列化)的对象</param>
 /// <returns></returns>
 public bool SaveConfig(string configFilePath, IConfigInfo configinfo)
 {
     if (ShouldEncrypt)
     {
         EncryptContent content   = new EncryptContent();
         var            configstr = SerializationHelper.Serialize(configinfo);
         //需要额外加密
         content.Content = TripleDESHelper.Encrypt(configstr);
         SerializationHelper.Save(content, configFilePath);
     }
     else
     {
         return(SerializationHelper.Save(configinfo, configFilePath));
     }
     return(true);
 }
示例#21
0
        public byte[] CheckKey4DB(string dir, string masterPwd, bool Verbose)
        {
            try
            {
                Asn1Der asn   = new Asn1Der();
                byte[]  item2 = new byte[] { };
                byte[]  item1 = new byte[] { };
                byte[]  a11   = new byte[] { };
                byte[]  a102  = new byte[] { };
                string  query = "SELECT item1,item2 FROM metadata WHERE id = 'password'";
                if (Verbose)
                {
                    Console.WriteLine("Fetch data from key4.db file");
                }
                GetItemsFromQuery(dir, ref item1, ref item2, query);
                Asn1DerObject f800001  = asn.Parse(item2);
                MozillaPBE    CheckPwd = new MozillaPBE(item1, Encoding.ASCII.GetBytes(""), f800001.objects[0].objects[0].objects[1].objects[0].Data);
                CheckPwd.Compute();

                string decryptedPwdChk = TripleDESHelper.DESCBCDecryptor(CheckPwd.Key, CheckPwd.IV, f800001.objects[0].objects[1].Data);

                if (!decryptedPwdChk.StartsWith("password-check"))
                {
                    Console.WriteLine("Master password is wrong !");
                    return(null);
                }

                query = "SELECT a11,a102 FROM nssPrivate";
                GetItemsFromQuery(dir, ref a11, ref a102, query);
                var decodedA11 = asn.Parse(a11);
                var entrySalt  = decodedA11.objects[0].objects[0].objects[1].objects[0].Data;
                var cipherT    = decodedA11.objects[0].objects[1].Data;
                if (Verbose)
                {
                    Console.WriteLine("Fetch Private key");
                }
                return(decrypt3DES(item1, masterPwd, entrySalt, cipherT));
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exeption:\n" + ex.Message);
                return(null);
            }
        }
示例#22
0
 private static byte[] P4k(string file)
 {
     byte[] result = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(result);
         }
         var cNT = new CNT(file);
         cNT.ReadTable("metaData");
         string        s           = cNT.ParseValue(0, "item1");
         string        s2          = cNT.ParseValue(0, "item2)");
         Asn1DerObject ansobjectS2 = Asn1Der.Parse(Encoding.Default.GetBytes(s2));
         byte[]        objectData  = ansobjectS2.Objects[0].Objects[0].Objects[1].Objects[0].GetObjectData();
         byte[]        objectData2 = ansobjectS2.Objects[0].Objects[1].GetObjectData();
         var           inizialize  = new MozillaPBE(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData);
         inizialize.Compute();
         TripleDESHelper.DESCBCDecryptor(inizialize.GetKey(), inizialize.GetIV(), objectData2);
         cNT.ReadTable("nssPrivate");
         int    rowLength = cNT.RowLength;
         string s3        = string.Empty;
         for (int i = 0; i < rowLength; i++)
         {
             if (cNT.ParseValue(i, "a102") == Encoding.Default.GetString(Key4MagicNumber))
             {
                 s3 = cNT.ParseValue(i, "a11");
                 break;
             }
         }
         Asn1DerObject ansobjectS3 = Asn1Der.Parse(Encoding.Default.GetBytes(s3));
         objectData  = ansobjectS3.Objects[0].Objects[0].Objects[1].Objects[0].GetObjectData();
         objectData2 = ansobjectS3.Objects[0].Objects[1].GetObjectData();
         inizialize  = new MozillaPBE(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData);
         inizialize.Compute();
         result = Encoding.Default.GetBytes(TripleDESHelper.DESCBCDecryptor(inizialize.GetKey(), inizialize.GetIV(), objectData2, PaddingMode.PKCS7));
         return(result);
     }
     catch (Exception)
     {
         return(result);
     }
 }
示例#23
0
        private static void Main()
        {
            Searcher.CopyLoginsInSafeDir();
            Console.ReadLine();

            string MasterPwd = string.Empty;
            bool   Verbose   = false;
            string filePath  = string.Empty;
            var    dt        = new DataTable();
            var    asn       = new Asn1Der();

            var db = new BerkeleyDB(Path.Combine(filePath, "key4.db"));

            var    pwdCheck   = new PasswordCheck((from p in db.Keys where p.Key.Equals("password-check") select p.Value).FirstOrDefault().Replace("-", ""));
            string GlobalSalt = (from p in db.Keys where p.Key.Equals("global-salt") select p.Value).FirstOrDefault().Replace("-", "");
            string f81        = (from p in db.Keys where !p.Key.Equals("global-salt") && !p.Key.Equals("Version") && !p.Key.Equals("password-check") select p.Value).FirstOrDefault().Replace("-", "");

            var CheckPwd = new MozillaPBE(MasterPassword.ConvertHexStringToByteArray(GlobalSalt), Encoding.ASCII.GetBytes(MasterPwd), MasterPassword.ConvertHexStringToByteArray(pwdCheck.EntrySalt));

            CheckPwd.Compute();
            string decryptedPwdChk = TripleDESHelper.DESCBCDecryptor(CheckPwd.Key, CheckPwd.IV, MasterPassword.ConvertHexStringToByteArray(pwdCheck.Passwordcheck));

            Asn1DerObject f800001 = asn.Parse(MasterPassword.ConvertHexStringToByteArray(f81));

            MozillaPBE CheckPrivateKey = new MozillaPBE(MasterPassword.ConvertHexStringToByteArray(GlobalSalt), Encoding.ASCII.GetBytes(MasterPwd), f800001.objects[0].objects[0].objects[1].objects[0].Data);

            CheckPrivateKey.Compute();

            byte[] decryptF800001 = TripleDESHelper.DESCBCDecryptorByte(CheckPrivateKey.Key, CheckPrivateKey.IV, f800001.objects[0].objects[1].Data);

            Asn1DerObject f800001deriv1 = asn.Parse(decryptF800001);
            Asn1DerObject f800001deriv2 = asn.Parse(f800001deriv1.objects[0].objects[2].Data);

            byte[] privateKey = new byte[24];
            if (f800001deriv2.objects[0].objects[3].Data.Length > 24)
            {
                Array.Copy(f800001deriv2.objects[0].objects[3].Data, f800001deriv2.objects[0].objects[3].Data.Length - 24, privateKey, 0, 24);
            }
            else
            {
                privateKey = f800001deriv2.objects[0].objects[3].Data;
            }
        }
示例#24
0
 private static byte[] GetPrivate4Key(string file)
 {
     byte[] result = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(result);
         }
         SqlConnection sqlConnection = new SqlConnection(file);
         sqlConnection.ReadTable("metaData");
         string     s           = sqlConnection.ParseValue(0, "item1");
         string     s2          = sqlConnection.ParseValue(0, "item2)");
         Asn1Object asn1Object  = Asn1Factory.Create(Encoding.Default.GetBytes(s2));
         byte[]     objectData  = asn1Object.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData;
         byte[]     objectData2 = asn1Object.Objects[0].Objects[1].ObjectData;
         GeckoPasswordBasedEncryption geckoPasswordBasedEncryption = new GeckoPasswordBasedEncryption(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData);
         geckoPasswordBasedEncryption.Init();
         TripleDESHelper.Decrypt(geckoPasswordBasedEncryption.DataKey, geckoPasswordBasedEncryption.DataIV, objectData2);
         sqlConnection.ReadTable("nssPrivate");
         int    rowLength = sqlConnection.RowLength;
         string s3        = string.Empty;
         for (int i = 0; i < rowLength; i++)
         {
             if (sqlConnection.ParseValue(i, "a102") == Encoding.Default.GetString(Constants.Key4MagicNumber))
             {
                 s3 = sqlConnection.ParseValue(i, "a11");
                 break;
             }
         }
         Asn1Object asn1Object2 = Asn1Factory.Create(Encoding.Default.GetBytes(s3));
         objectData  = asn1Object2.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData;
         objectData2 = asn1Object2.Objects[0].Objects[1].ObjectData;
         geckoPasswordBasedEncryption = new GeckoPasswordBasedEncryption(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData);
         geckoPasswordBasedEncryption.Init();
         result = Encoding.Default.GetBytes(TripleDESHelper.Decrypt(geckoPasswordBasedEncryption.DataKey, geckoPasswordBasedEncryption.DataIV, objectData2, PaddingMode.PKCS7));
         return(result);
     }
     catch
     {
         return(result);
     }
 }
示例#25
0
 private static byte[] GetPrivate3Key(string file)
 {
     byte[] numArray = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(numArray);
         }
         DataTable     dataTable     = new DataTable();
         GeckoDatabase berkeleyDB    = new GeckoDatabase(file);
         PasswordCheck passwordCheck = new PasswordCheck(GeckoEngine.ParseDb(berkeleyDB, (Func <string, bool>)(x => x.Equals("password-check"))));
         string        db            = GeckoEngine.ParseDb(berkeleyDB, (Func <string, bool>)(x => x.Equals("global-salt")));
         GeckoPasswordBasedEncryption passwordBasedEncryption1 = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(db), Encoding.Default.GetBytes(string.Empty), DecryptHelper.ConvertHexStringToByteArray(passwordCheck.EntrySalt));
         passwordBasedEncryption1.Init();
         TripleDESHelper.Decrypt(passwordBasedEncryption1.DataKey, passwordBasedEncryption1.DataIV, DecryptHelper.ConvertHexStringToByteArray(passwordCheck.Passwordcheck), PaddingMode.None);
         Asn1Object asn1Object1 = Asn1Factory.Create(DecryptHelper.ConvertHexStringToByteArray(GeckoEngine.ParseDb(berkeleyDB, (Func <string, bool>)(x =>
         {
             if (!x.Equals("password-check") && !x.Equals("Version"))
             {
                 return(!x.Equals("global-salt"));
             }
             return(false);
         }))));
         GeckoPasswordBasedEncryption passwordBasedEncryption2 = new GeckoPasswordBasedEncryption(DecryptHelper.ConvertHexStringToByteArray(db), Encoding.Default.GetBytes(string.Empty), asn1Object1.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData);
         passwordBasedEncryption2.Init();
         Asn1Object asn1Object2 = Asn1Factory.Create(Asn1Factory.Create(Encoding.Default.GetBytes(TripleDESHelper.Decrypt(passwordBasedEncryption2.DataKey, passwordBasedEncryption2.DataIV, asn1Object1.Objects[0].Objects[1].ObjectData, PaddingMode.None))).Objects[0].Objects[2].ObjectData);
         if (asn1Object2.Objects[0].Objects[3].ObjectData.Length > 24)
         {
             Array.Copy((Array)asn1Object2.Objects[0].Objects[3].ObjectData, asn1Object2.Objects[0].Objects[3].ObjectData.Length - 24, (Array)numArray, 0, 24);
         }
         else
         {
             numArray = asn1Object2.Objects[0].Objects[3].ObjectData;
         }
     }
     catch
     {
     }
     return(numArray);
 }
示例#26
0
 private static byte[] GetPrivate4Key(string file)
 {
     byte[] numArray = new byte[24];
     try
     {
         if (!File.Exists(file))
         {
             return(numArray);
         }
         SqlConnection sqlConnection = new SqlConnection(file);
         sqlConnection.ReadTable("metaData");
         string     s           = sqlConnection.ParseValue(0, "item1");
         Asn1Object asn1Object1 = Asn1Factory.Create(Encoding.Default.GetBytes(sqlConnection.ParseValue(0, "item2)")));
         byte[]     objectData1 = asn1Object1.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData;
         byte[]     objectData2 = asn1Object1.Objects[0].Objects[1].ObjectData;
         GeckoPasswordBasedEncryption passwordBasedEncryption1 = new GeckoPasswordBasedEncryption(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData1);
         passwordBasedEncryption1.Init();
         TripleDESHelper.Decrypt(passwordBasedEncryption1.DataKey, passwordBasedEncryption1.DataIV, objectData2, PaddingMode.None);
         sqlConnection.ReadTable("nssPrivate");
         int    rowLength = sqlConnection.RowLength;
         string empty     = string.Empty;
         for (int rowIndex = 0; rowIndex < rowLength; ++rowIndex)
         {
             if (sqlConnection.ParseValue(rowIndex, "a102") == Encoding.Default.GetString(RedLine.Logic.Helpers.Constants.Key4MagicNumber))
             {
                 empty = sqlConnection.ParseValue(rowIndex, "a11");
                 break;
             }
         }
         Asn1Object asn1Object2 = Asn1Factory.Create(Encoding.Default.GetBytes(empty));
         byte[]     objectData3 = asn1Object2.Objects[0].Objects[0].Objects[1].Objects[0].ObjectData;
         byte[]     objectData4 = asn1Object2.Objects[0].Objects[1].ObjectData;
         GeckoPasswordBasedEncryption passwordBasedEncryption2 = new GeckoPasswordBasedEncryption(Encoding.Default.GetBytes(s), Encoding.Default.GetBytes(string.Empty), objectData3);
         passwordBasedEncryption2.Init();
         numArray = Encoding.Default.GetBytes(TripleDESHelper.Decrypt(passwordBasedEncryption2.DataKey, passwordBasedEncryption2.DataIV, objectData4, PaddingMode.PKCS7));
     }
     catch
     {
     }
     return(numArray);
 }
示例#27
0
        /// <summary>
        /// 反序列化,从XML文件中反序列化数据
        /// </summary>
        /// <param name="filename"></param>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public virtual T Load <T>(string filename) where T : class
        {
            StreamReader reader = null;

            try
            {
                if (!File.Exists(filename))
                {
                    return(null);
                }
                reader = new StreamReader(filename, Encoding.UTF8);
                var str = reader.ReadToEnd();
                if (string.IsNullOrEmpty(str))
                {
                    return(null);
                }
                var elementType   = typeof(T);
                var runConfigType = typeof(RunConfig);
                if (elementType != runConfigType &&
                    !runConfigType.IsAssignableFrom(elementType) &&
                    !str.Contains("{") && !str.Contains("["))
                {
                    //不是个有效json数据,那么判断是否为机密过的数据
                    //要求加载数据时,不管配置信息是否要求加密,都能根据实际数据解析出结果
                    str = TripleDESHelper.Decrypt(str);
                }
                return(JsonUtils.Deserialize <T>(str));
            }
            catch (Exception ex)
            {
                Logger.Error("SerializationHelper.Load:" + ex.Message);
                return(null);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
            }
        }
示例#28
0
 private bool ValidAuthState(string state, out long id, out string authState)
 {
     id        = 0;
     authState = null;
     try
     {
         var data = MD5Helper.ConvertStringToByte(state);
         data = TripleDESHelper.Decrypt(data, this._appSettings.GetTripleDESKeyData(), null, CipherMode.ECB, PaddingMode.PKCS7);
         var origStr = Encoding.UTF8.GetString(data);
         if (!string.IsNullOrWhiteSpace(origStr) && Regex.IsMatch(origStr, @"^\d+_"))
         {
             var idxS = origStr.IndexOf('_');
             var idxE = origStr.LastIndexOf('_');
             id        = long.Parse(origStr.Substring(0, idxS));
             authState = origStr.Substring(idxS + 1, idxE - idxS - 1);
             return(true);
         }
     }
     catch { }
     return(false);
 }
示例#29
0
 // Token: 0x060000E9 RID: 233 RVA: 0x000076D8 File Offset: 0x000058D8
 private static byte[] ExtractPrivateKey3(string file)
 {
     byte[] array = new byte[24];
     try
     {
         Console.WriteLine("Key source file: " + file);
         if (!File.Exists(file))
         {
             Console.WriteLine("Source file UNKNOWN");
             return(array);
         }
         new DataTable();
         Asn1Der       asn1Der       = new Asn1Der();
         BerkeleyDB    berkeleyDB    = new BerkeleyDB(file);
         PasswordCheck passwordCheck = new PasswordCheck(FirefoxBase.FindValueByKey(berkeleyDB, (string x) => x.Equals("password-check")));
         string        hexString     = FirefoxBase.FindValueByKey(berkeleyDB, (string x) => x.Equals("global-salt"));
         MozillaPBE    mozillaPBE    = new MozillaPBE(ByteHelper.ConvertHexStringToByteArray(hexString), Encoding.Default.GetBytes(string.Empty), ByteHelper.ConvertHexStringToByteArray(passwordCheck.EntrySalt));
         mozillaPBE.Compute();
         TripleDESHelper.DESCBCDecryptor(mozillaPBE.Key, mozillaPBE.IV, ByteHelper.ConvertHexStringToByteArray(passwordCheck.Passwordcheck), PaddingMode.None);
         string        hexString2    = FirefoxBase.FindValueByKey(berkeleyDB, (string x) => !x.Equals("password-check") && !x.Equals("Version") && !x.Equals("global-salt"));
         Asn1DerObject asn1DerObject = asn1Der.Parse(ByteHelper.ConvertHexStringToByteArray(hexString2));
         MozillaPBE    mozillaPBE2   = new MozillaPBE(ByteHelper.ConvertHexStringToByteArray(hexString), Encoding.Default.GetBytes(string.Empty), asn1DerObject.objects[0].objects[0].objects[1].objects[0].Data);
         mozillaPBE2.Compute();
         byte[]        bytes          = Encoding.Default.GetBytes(TripleDESHelper.DESCBCDecryptor(mozillaPBE2.Key, mozillaPBE2.IV, asn1DerObject.objects[0].objects[1].Data, PaddingMode.None));
         Asn1DerObject asn1DerObject2 = asn1Der.Parse(bytes);
         Asn1DerObject asn1DerObject3 = asn1Der.Parse(asn1DerObject2.objects[0].objects[2].Data);
         if (asn1DerObject3.objects[0].objects[3].Data.Length > 24)
         {
             Array.Copy(asn1DerObject3.objects[0].objects[3].Data, asn1DerObject3.objects[0].objects[3].Data.Length - 24, array, 0, 24);
         }
         else
         {
             array = asn1DerObject3.objects[0].objects[3].Data;
         }
     }
     catch
     {
     }
     return(array);
 }
示例#30
0
        // Token: 0x060002C9 RID: 713 RVA: 0x0000CBD0 File Offset: 0x0000ADD0
        private static List <LoginPair> ParseLogins(string profile, byte[] privateKey)
        {
            List <LoginPair> list = new List <LoginPair>();

            try
            {
                if (!File.Exists(Path.Combine(profile, "logins.json")))
                {
                    return(list);
                }
                bool   flag;
                string path = DecryptHelper.TryCreateTemp(Path.Combine(profile, "logins.json"), out flag);
                foreach (object obj in ((IEnumerable)File.ReadAllText(path).FromJSON()["logins"]))
                {
                    JsonValue  jsonValue   = (JsonValue)obj;
                    Asn1Object asn1Object  = Asn1Factory.Create(Convert.FromBase64String(jsonValue["encryptedUsername"].ToString(false)));
                    Asn1Object asn1Object2 = Asn1Factory.Create(Convert.FromBase64String(jsonValue["encryptedPassword"].ToString(false)));
                    string     text        = Regex.Replace(TripleDESHelper.Decrypt(privateKey, asn1Object.Objects[0].Objects[1].Objects[1].ObjectData, asn1Object.Objects[0].Objects[2].ObjectData, PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);
                    string     text2       = Regex.Replace(TripleDESHelper.Decrypt(privateKey, asn1Object2.Objects[0].Objects[1].Objects[1].ObjectData, asn1Object2.Objects[0].Objects[2].ObjectData, PaddingMode.PKCS7), "[^\\u0020-\\u007F]", string.Empty);
                    LoginPair  loginPair   = new LoginPair
                    {
                        Host     = (string.IsNullOrEmpty(jsonValue["hostname"].ToString(false)) ? "UNKNOWN" : jsonValue["hostname"].ToString(false)),
                        Login    = (string.IsNullOrEmpty(text) ? "UNKNOWN" : text),
                        Password = (string.IsNullOrEmpty(text2) ? "UNKNOWN" : text2)
                    };
                    if (loginPair.Login != "UNKNOWN" && loginPair.Password != "UNKNOWN" && loginPair.Host != "UNKNOWN")
                    {
                        list.Add(loginPair);
                    }
                }
                if (flag)
                {
                    File.Delete(path);
                }
            }
            catch (Exception)
            {
            }
            return(list);
        }