Пример #1
0
        public static string Encrypt(string clearText, ICSPRNGServer csprng)
        {
            byte[] salt = new byte[16];
            csprng.getRandomValues(salt);

            byte[] encBytes = null;

            byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
            using (Aes encryptor = Aes.Create())
            {
                encryptor.KeySize   = 256;
                encryptor.BlockSize = 128;
                encryptor.Mode      = CipherMode.CBC;
                encryptor.Padding   = PaddingMode.PKCS7;
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(csprng.Key(), salt, 1);
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV  = pdb.GetBytes(16);

                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(clearBytes, 0, clearBytes.Length);
                    }
                    encBytes = ms.ToArray();
                }
            }

            byte[] saltAndCipher = salt.Concat(encBytes).ToArray();

            string saltAndCipherText = Convert.ToBase64String(saltAndCipher);

            return(saltAndCipherText);
        }
Пример #2
0
        public static string Decrypt(string clearText, ICSPRNGServer csprng)
        {
            byte[] baseclear = Convert.FromBase64String(clearText);

            byte[] clearBytes = new byte[baseclear.Length - 16];

            for (int i = 0; i < clearBytes.Length; i++)
            {
                clearBytes[i] = baseclear[i + 16];
            }

            byte[] salt = baseclear.Take(16).ToArray();

            using (Aes encryptor = Aes.Create())
            {
                encryptor.KeySize   = 256;
                encryptor.BlockSize = 128;
                encryptor.Mode      = CipherMode.CBC;
                encryptor.Padding   = PaddingMode.PKCS7;
                Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(csprng.Key(), salt, 1);
                encryptor.Key = pdb.GetBytes(32);
                encryptor.IV  = pdb.GetBytes(16);
                using (MemoryStream ms = new MemoryStream(clearBytes))
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(cs))
                        {
                            clearText = srDecrypt.ReadToEnd();
                        }
                    }
                }
            }
            clearText = clearText.Replace("\0", "");
            return(clearText);
        }