コード例 #1
0
        private string Encrypt(string plain)
        {
            string encryptString = null;

            using (SymmetricAlgorithm algorithm = AesCryptoServiceProvider.Create())
            {
                byte[] key = Convert.FromBase64String(_aesKey);
                byte[] iv  = Convert.FromBase64String(_aesIv);
                algorithm.Key = key;
                algorithm.IV  = iv;

                ICryptoTransform encryptor = algorithm.CreateEncryptor(key, iv);
                using (MemoryStream ms = new MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter sw = new StreamWriter(cs))
                        {
                            sw.Write(plain);
                        }
                        byte[] encryptBytes = ms.ToArray();
                        encryptString = Convert.ToBase64String(encryptBytes);
                    }
                }
            }
            return(encryptString);
        }
コード例 #2
0
ファイル: Encryption.cs プロジェクト: AJSoft/ddns-sharp
        public static string Decrypt(string str)
        {
            var bytes = new byte[16];

            for (var i = 0; i < 16; i++)
            {
                var b = byte.Parse((str.Substring(i * 2, 2)),
                                   System.Globalization.NumberStyles.HexNumber);
                bytes[i] = b;
            }

            var aes = AesCryptoServiceProvider.Create();

            aes.BlockSize = 128;
            aes.KeySize   = 128;
            aes.Key       = Key;
            aes.IV        = IV;

            var ms           = new MemoryStream(bytes);
            var decryptor    = aes.CreateDecryptor();
            var cryptoStream = new CryptoStream(ms, decryptor, CryptoStreamMode.Read);
            var sr           = new StreamReader(cryptoStream);
            var strOut       = sr.ReadToEnd();

            cryptoStream.Close();
            ms.Close();
            sr.Close();

            return(strOut);
        }
コード例 #3
0
        public static string GenerateKey()
        {
            SymmetricAlgorithm algorithm = null;

            algorithm = AesCryptoServiceProvider.Create();
            return(algorithm == null ? string.Empty : ASCIIEncoding.ASCII.GetString(algorithm.Key));
        }
コード例 #4
0
 void encrypt(Stream inStream, Stream outStream)
 {
     using (SymmetricAlgorithm algorithm = AesCryptoServiceProvider.Create())
     {
         algorithm.GenerateKey();
         algorithm.GenerateIV();
         byte[] iv  = algorithm.IV;
         byte[] key = algorithm.Key;
         using (ICryptoTransform encryptor = algorithm.CreateEncryptor(key, iv))
         {
             using (CryptoStream cs = new CryptoStream(outStream, encryptor, CryptoStreamMode.Write))
             {
                 BinaryWriter bw = new BinaryWriter(outStream);
                 bw.Write(iv);
                 byte[]       readBuffer = new byte[1];
                 BinaryReader br         = new BinaryReader(inStream);
                 while (br.Read(readBuffer, 0, readBuffer.Length) != 0)
                 {
                     cs.Write(readBuffer, 0, 1);
                 }
             }
         }
     }
     inStream.Close();
     outStream.Close();
 }
コード例 #5
0
        private string Decrypt(string encryptString)
        {
            byte[] encryptBytes = Convert.FromBase64String(encryptString);
            string plain        = null;

            using (SymmetricAlgorithm algorithm = AesCryptoServiceProvider.Create())
            {
                byte[] key = Convert.FromBase64String(_aesKey);
                byte[] iv  = Convert.FromBase64String(_aesIv);

                algorithm.Key = key;
                algorithm.IV  = iv;

                ICryptoTransform decryptor = algorithm.CreateDecryptor(key, iv);
                using (MemoryStream ms = new MemoryStream(encryptBytes))
                {
                    using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader sr = new StreamReader(cs))
                        {
                            plain = sr.ReadToEnd();
                        }
                    }
                }
            }
            return(plain);
        }
コード例 #6
0
 public Encryptor()
 {
     aes         = AesCryptoServiceProvider.Create();
     aes.Mode    = CipherMode.ECB;
     aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
     createAESKey();
 }
コード例 #7
0
ファイル: Crypto.cs プロジェクト: privacywar/OpenDeadMailDrop
        public static string EncryptAESBase64(byte[] bytesPlain, byte[] bytesKey)
        {
            if (bytesPlain == null)
            {
                return(null);
            }
            Aes des = AesCryptoServiceProvider.Create();

            des.Mode = CipherMode.CBC;
            des.GenerateIV();
            byte[]        bytesIV   = des.IV;
            StringBuilder sb        = new StringBuilder();
            MemoryStream  ms        = new MemoryStream();
            CryptoStream  encStream = new CryptoStream(ms, des.CreateEncryptor(bytesKey, bytesIV), CryptoStreamMode.Write);
            // Encrypt the data using default encoding
            int remainder = bytesPlain.Length % des.BlockSize;

            byte[] bytesToEncrypt = new byte[bytesPlain.Length + remainder];
            bytesPlain.CopyTo(bytesToEncrypt, 0);
            encStream.Write(bytesToEncrypt, 0, bytesPlain.Length);
            encStream.FlushFinalBlock();
            encStream.Close();
            byte[] cryptText = ms.ToArray();
            sb.Append(Base64FromBytes(cryptText, cryptText.Length));
            sb.Append(_Base64MARKER);
            sb.Append(Base64FromBytes(bytesIV, bytesIV.Length));
            return(sb.ToString());
        }
コード例 #8
0
        // Generate a secret key
        public static string GenerateKey()
        {
            SymmetricAlgorithm symmAlgorithm = null;

            symmAlgorithm = AesCryptoServiceProvider.Create();

            return(ASCIIEncoding.ASCII.GetString(symmAlgorithm.Key));
        }
コード例 #9
0
        public static byte[] Encrypt(byte[] input, byte[] key, byte[] salt, string algorithm)
        {
            if (input == null || input.Length < 1 ||
                key == null || key.Length < 1 ||
                salt == null || salt.Length < 1)
            {
                throw new ArgumentException();
            }

            System.Security.Cryptography.SymmetricAlgorithm sAlgorithm;
            switch (algorithm.ToUpperInvariant())
            {
            case "DES":
                sAlgorithm = DESCryptoServiceProvider.Create();
                break;

            case "3DES":
            case "TDES":
            case "TRIPLEDES":
                sAlgorithm = TripleDESCryptoServiceProvider.Create();
                break;

            case "AES":
                sAlgorithm = AesCryptoServiceProvider.Create();
                break;

            case "RC2":
                sAlgorithm = RC2CryptoServiceProvider.Create();
                break;

            case "RIJNDAEL":
                sAlgorithm = new RijndaelManaged();
                break;

            default:
                throw new NotSupportedException();
            }
            DeriveBytes rdb = new Rfc2898DeriveBytes(key, salt, 1024);

            sAlgorithm.Key = rdb.GetBytes(sAlgorithm.KeySize / 8);
            sAlgorithm.IV  = rdb.GetBytes(sAlgorithm.BlockSize / 8);
            byte[] reslut;
            using (ICryptoTransform encryptor = sAlgorithm.CreateEncryptor(sAlgorithm.Key, sAlgorithm.IV))
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    using (CryptoStream cryptoStream = new CryptoStream(stream, encryptor, CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(input, 0, input.Length);
                        cryptoStream.FlushFinalBlock();
                        cryptoStream.Clear();
                    }
                    reslut = stream.ToArray();
                }
            }
            sAlgorithm.Clear();
            return(reslut);
        }
コード例 #10
0
ファイル: Crypto.cs プロジェクト: privacywar/OpenDeadMailDrop
        /// <summary>
        /// Decrypts the given string of cipher text with the given key string.  The IV for the
        /// cipher text is assumed to be appended to the cipher text after a MARKER character, e.g.
        /// 123544151-43234324.  This method uses DES as the crypto provider and assumes also
        /// that the cipher text is hexadecimal encodes.
        /// </summary>
        /// <param name="strData">The cipher text + the IV</param>
        /// <param name="strKey">The cipher key</param>
        /// <returns>The original plain text as an array of bytes</returns>
        public static byte[] DecryptAESToBytes(string strData, string strKey)
        {
            if (strData == null)
            {
                return(null);
            }
            Aes des = AesCryptoServiceProvider.Create();

            des.Mode = CipherMode.CBC;
            byte[] bytesKey = MakeCipherKey(strKey, des);
            return(DecryptAESToBytes(strData, bytesKey));
        }
コード例 #11
0
ファイル: Crypto.cs プロジェクト: privacywar/OpenDeadMailDrop
        /// Encrypts the given byte array using the given key. The resulting
        /// cipher text is then converted to base-64 encoding.
        /// </summary>
        /// <param name="bytesPlain"></param>
        /// <param name="strKey"></param>
        /// <returns></returns>
        public static string EncryptAES(byte[] bytesPlain, string strKey)
        {
            if (bytesPlain == null)
            {
                return(null);
            }
            Aes des = AesCryptoServiceProvider.Create();

            des.Mode = CipherMode.CBC;
            byte[] bytesKey = MakeCipherKey(strKey, des);
            return(EncryptAES(bytesPlain, bytesKey));
        }
コード例 #12
0
ファイル: Key.cs プロジェクト: JanaIlic/sbes_LP8
        public static string GenerateKey()
        {
            SymmetricAlgorithm algorithm = AesCryptoServiceProvider.Create();

            if (algorithm == null)
            {
                return(String.Empty);
            }
            else
            {
                return(ASCIIEncoding.ASCII.GetString(algorithm.Key));
            }
        }
コード例 #13
0
        /// <summary>
        /// Method for decrypting data
        /// </summary>
        /// <param name="encrypter">What encryption is used</param>
        /// <param name="message">The message to decrypt</param>
        /// <param name="key">The encryption key</param>
        /// <param name="iv">the encryption iv</param>
        /// <returns>Returns a decrypted byte[]</returns>
        public static void DecryptFolder(Encrypters encrypter, byte[] key, byte[] iv)
        {
            watch = new Stopwatch();
            watch.Start();
            SymmetricAlgorithm algorithm = null;

            switch (encrypter)
            {
            case Encrypters.DES:
                algorithm = DESCryptoServiceProvider.Create();
                break;

            case Encrypters.TRIPLEDES:
                algorithm = TripleDESCryptoServiceProvider.Create();
                break;

            case Encrypters.AES:
                algorithm = AesCryptoServiceProvider.Create();
                break;
            }

            algorithm.Mode    = CipherMode.CBC;
            algorithm.Padding = PaddingMode.PKCS7;
            try
            {
                algorithm.Key = key;
                algorithm.IV  = iv;
            }
            catch (FormatException e)
            {
                Console.WriteLine("Make sure to use the correct encryption method");
                throw e;
            }

            using (var memoryStream = new MemoryStream())
            {
                var cryptoStream = new CryptoStream(memoryStream, algorithm.CreateDecryptor(),
                                                    CryptoStreamMode.Write);

                foreach (string file in Directory.GetFiles(Environment.CurrentDirectory, "*.txt"))
                {
                    byte[] fileText = File.ReadAllBytes(file);
                    cryptoStream.Write(fileText, 0, fileText.Length);
                    cryptoStream.FlushFinalBlock();
                    File.WriteAllBytes(file, memoryStream.ToArray());
                }

                watch.Stop();
                Console.WriteLine("Stopwatch took " + watch.ElapsedMilliseconds + "ms to decrypt");
            }
        }
コード例 #14
0
ファイル: ScopedKey.cs プロジェクト: grosbalou/keen-sdk-net
        /// <summary>
        /// Set up an Aes instance with the correct mode, key and IV
        /// </summary>
        /// <param name="Key">Encryption key</param>
        /// <param name="IV">Initialization Vector, if left blank one will be generated.</param>
        /// <returns></returns>
        private static Aes GetAes(byte[] Key, string IV)
        {
            var aesAlg = AesCryptoServiceProvider.Create();

            aesAlg.KeySize = KeySizeShort * 8; // key size in bits
            aesAlg.Mode    = CipherMode.CBC;
            aesAlg.Padding = PaddingMode.None;
            aesAlg.Key     = Key;
            if (IV != "")
            {
                aesAlg.IV = HexToByte(IV);
            }
            return(aesAlg);
        }
コード例 #15
0
ファイル: ScopedKey.cs プロジェクト: quxiaoshan/keen-sdk-net
        /// <summary>
        /// Set up an Aes instance with the correct mode, key and IV
        /// </summary>
        /// <param name="Key">Encryption key</param>
        /// <param name="IV">Initialization Vector, if left blank one will be generated.</param>
        /// <returns></returns>
        private static Aes GetAes(string Key, string IV)
        {
            var aesAlg = AesCryptoServiceProvider.Create();

            aesAlg.KeySize = KeySize * 8; // key size in bits
            aesAlg.Mode    = CipherMode.CBC;
            aesAlg.Padding = PaddingMode.None;
            aesAlg.Key     = Encoding.UTF8.GetBytes(AddPadding(Key));
            if (IV != "")
            {
                aesAlg.IV = HexToByte(IV);
            }
            return(aesAlg);
        }
コード例 #16
0
        /// <summary>
        /// Method for encrypting txt files in current directory
        /// </summary>
        /// <param name="encrypter">Method for encryption</param>
        /// <param name="key">The key used to encrypt with</param>
        /// <param name="iv">The iv used to encrypt with</param>
        public static void EncryptFolder(Encrypters encrypter, byte[] key, byte[] iv)
        {
            watch = new Stopwatch();
            watch.Start();
            SymmetricAlgorithm algorithm = null;

            switch (encrypter)
            {
            case Encrypters.DES:
                algorithm = DESCryptoServiceProvider.Create();
                break;

            case Encrypters.TRIPLEDES:
                algorithm = TripleDESCryptoServiceProvider.Create();
                break;

            case Encrypters.AES:
                algorithm = AesCryptoServiceProvider.Create();
                break;
            }

            algorithm.Mode    = CipherMode.CBC;
            algorithm.Padding = PaddingMode.PKCS7;

            algorithm.Key = key;
            algorithm.IV  = iv;

            using (var memoryStream = new MemoryStream())
            {
                var cryptoStream = new CryptoStream(memoryStream, algorithm.CreateEncryptor(),
                                                    CryptoStreamMode.Write);

                foreach (string file in Directory.GetFiles(Environment.CurrentDirectory, "*.txt"))
                {
                    byte[] fileText = File.ReadAllBytes(file);

                    cryptoStream.Write(fileText, 0, fileText.Length);
                    cryptoStream.FlushFinalBlock();
                    File.WriteAllBytes(file, memoryStream.ToArray());
                }

                watch.Stop();
                Console.WriteLine("Stopwatch took: " + watch.ElapsedMilliseconds + "ms to complete \n" +
                                  "Remember to save the key and IV somewhere");
                Console.WriteLine("Key:" + Convert.ToBase64String(algorithm.Key) + "\n" +
                                  "IV: " + Convert.ToBase64String(algorithm.IV));
            }
        }
コード例 #17
0
        public static byte[] EncryptChunkdata(byte[] data, byte[] key)
        {
            var aes = AesCryptoServiceProvider.Create();

            aes.Mode    = CipherMode.CBC;
            aes.KeySize = 128;
            aes.Padding = PaddingMode.PKCS7;
            MemoryStream result = new MemoryStream();

            using (CryptoStream cs = new CryptoStream(result, aes.CreateEncryptor(key, key), CryptoStreamMode.Write))
            {
                new MemoryStream(data).CopyTo(cs);
                cs.FlushFinalBlock();
                return(result.ToArray());
            }
        }
コード例 #18
0
        public static byte[] DecryptChunkdata(byte[] data, byte[] key, int size)
        {
            var aes = AesCryptoServiceProvider.Create();

            aes.Mode    = CipherMode.CBC;
            aes.KeySize = 128;
            aes.Padding = PaddingMode.PKCS7;
            MemoryStream input = new MemoryStream(data);

            input.Seek(0, 0);
            using (CryptoStream cs = new CryptoStream(input, aes.CreateDecryptor(key, key), CryptoStreamMode.Read))
            {
                MemoryStream m = new MemoryStream();
                cs.CopyTo(m, size);
                return(m.ToArray());
            }
        }
コード例 #19
0
        /// <summary>
        /// 根据KEY生成DES
        /// </summary>
        /// <param name="key">密钥.</param>
        /// <returns>Aes</returns>
        public static Aes CreateAES(string key)
        {
            Aes _aes = new AesCryptoServiceProvider();
            AesCryptoServiceProvider _desCrypto = (AesCryptoServiceProvider)AesCryptoServiceProvider.Create();

            if (!string.IsNullOrEmpty(key))
            {
                MD5 _md5 = new MD5CryptoServiceProvider();
                _aes.Key = _md5.ComputeHash(Encoding.UTF8.GetBytes(key));
            }
            else
            {
                _aes.Key = _desCrypto.Key;
            }

            _aes.IV = _aes.IV;
            return(_aes);
        }
コード例 #20
0
        /// <summary>
        /// 対称アルゴリズムによる
        /// 暗号化サービスプロバイダを生成
        /// </summary>
        /// <param name="esa">
        /// 対称アルゴリズムによる
        /// 暗号化サービスプロバイダの種類
        /// </param>
        /// <returns>
        /// 対称アルゴリズムによる
        /// 暗号化サービスプロバイダ
        /// </returns>
        private static SymmetricAlgorithm CreateSymmetricAlgorithm(EnumSymmetricAlgorithm esa)
        {
            SymmetricAlgorithm sa = null;

            // AesCryptoServiceProvider, AesManagedは3.5からの提供。

            if (esa == EnumSymmetricAlgorithm.AesCryptoServiceProvider)
            {
                // AesCryptoServiceProviderサービスプロバイダ
                sa = AesCryptoServiceProvider.Create(); // devps(1703)
            }
            else if (esa == EnumSymmetricAlgorithm.AesManaged)
            {
                // AesManagedサービスプロバイダ
                sa = AesManaged.Create(); // devps(1703)
            }
            else if (esa == EnumSymmetricAlgorithm.DESCryptoServiceProvider)
            {
                // DESCryptoServiceProviderサービスプロバイダ
                sa = DESCryptoServiceProvider.Create(); // devps(1703)
            }
            else if (esa == EnumSymmetricAlgorithm.RC2CryptoServiceProvider)
            {
                // RC2CryptoServiceProviderサービスプロバイダ
                sa = RC2CryptoServiceProvider.Create(); // devps(1703)
            }
            else if (esa == EnumSymmetricAlgorithm.RijndaelManaged)
            {
                // RijndaelManagedサービスプロバイダ
                sa = RijndaelManaged.Create(); // devps(1703)
            }
            else if (esa == EnumSymmetricAlgorithm.TripleDESCryptoServiceProvider)
            {
                // TripleDESCryptoServiceProviderサービスプロバイダ
                sa = TripleDESCryptoServiceProvider.Create(); // devps(1703)
            }
            else
            {
                throw new ArgumentException(
                          PublicExceptionMessage.ARGUMENT_INJUSTICE, "EnumSymmetricAlgorithm esa");
            }

            return(sa);
        }
コード例 #21
0
ファイル: Crypto.cs プロジェクト: privacywar/OpenDeadMailDrop
        /// <summary>
        /// Decrypts the given string of cipher text with the given key string.  The IV for the
        /// cipher text is assumed to be appended to the cipher text after a MARKER character, e.g.
        /// 123544151-43234324.  This method uses DES as the crypto provider and assumes also
        /// that the cipher text is hexadecimal encodes.
        /// </summary>
        /// <param name="strData">The cipher text + the IV</param>
        /// <param name="strKey">The cipher key</param>
        /// <returns>The original plain text as an array of bytes</returns>
        public static byte[] DecryptAESBase64ToBytes(string strData, string strKey)
        {
            if (strData == null)
            {
                return(null);
            }
            int ldx = strData.LastIndexOf(_Base64MARKER);

            if (ldx < 1)
            {
                ldx = strData.LastIndexOf('-');
            }
            if (ldx < 1)
            {
                throw (new SecurityException("Missing IV from cipher text"));
            }
            string strIV = strData.Substring(ldx + 1);

            strData = strData.Substring(0, ldx);
            Aes des = AesCryptoServiceProvider.Create();

            des.Mode = CipherMode.CBC;
            byte[]       bytesKey  = MakeCipherKey(strKey, des);
            byte[]       bytesIV   = Base64ToBytes(strIV);
            CryptoStream decStream = new CryptoStream(new MemoryStream(Base64ToBytes(strData)),
                                                      des.CreateDecryptor(bytesKey, bytesIV),
                                                      CryptoStreamMode.Read);
            MemoryStream ms = new MemoryStream();

            byte[] buf = new byte[4096];
            while (true)
            {
                int amt = decStream.Read(buf, 0, buf.Length);
                if (amt < 1)
                {
                    break;
                }
                ms.Write(buf, 0, amt);
            }
            return(ms.ToArray());
        }
コード例 #22
0
ファイル: OAuthSessionEntity.cs プロジェクト: devoctomy/cachy
        public void Complete(string token)
        {
            //generate aes key and iv
            AesCryptoServiceProvider aes = (AesCryptoServiceProvider)AesCryptoServiceProvider.Create();

            aes.GenerateIV();
            aes.GenerateKey();
            aes.Padding = PaddingMode.PKCS7;

            //encrypt the token and encode as hex
            byte[] unencryptedTokenBytes = System.Text.Encoding.UTF8.GetBytes(token);
            using (ICryptoTransform encrypt = aes.CreateEncryptor())
            {
                byte[] encryptedTokenBytes = encrypt.TransformFinalBlock(unencryptedTokenBytes, 0, unencryptedTokenBytes.Length);
                EncryptedToken = encryptedTokenBytes.ToHexString();
            }

            //hex decode the public rsa key xml
            string publicRSAKeyXML = PublicRSAKey.StringFromHexString();

            //create an initialise an instance of the rsa provider
            RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)RSACryptoServiceProvider.Create();

            rsa.FromXmlString(publicRSAKeyXML);

            //encrypt and hex encode the key
            byte[] encryptedAESKeyBytes = rsa.Encrypt(aes.Key, RSAEncryptionPadding.Pkcs1);
            string encryptedAESKey      = encryptedAESKeyBytes.ToHexString();

            //hex encode the IV
            string iv = aes.IV.ToHexString();

            //concatenate the iv and encrypted key
            EncryptedAESKey = String.Format("{0}.{1}", iv, encryptedAESKey);

            State = "complete";
        }
コード例 #23
0
        public static byte[] EncryptData(X509Certificate2 certificate, String message)
        {
            AesCryptoServiceProvider cryptoProvider = new AesCryptoServiceProvider();

            cryptoProvider.Padding = PaddingMode.Zeros;
            cryptoProvider.Key     = AesCryptoServiceProvider.Create().Key;
            cryptoProvider.Mode    = CipherMode.CBC;
            cryptoProvider.GenerateIV();

            MemoryStream     ms         = new MemoryStream();
            ICryptoTransform aesEncrypt = cryptoProvider.CreateEncryptor();

            CryptoStream cryptoStream;

            byte[] keyPlusIV = new byte[cryptoProvider.Key.Length + cryptoProvider.IV.Length];

            keyPlusIV = cryptoProvider.Key.Concat(cryptoProvider.IV).ToArray();

            RSACryptoServiceProvider rsaCSP = certificate.PublicKey.Key as RSACryptoServiceProvider;

            byte[] keyPlusIVEncrypted = new byte[256];
            keyPlusIVEncrypted = rsaCSP.Encrypt(keyPlusIV, true);
            byte[] messageEncrypted;
            using (cryptoStream = new CryptoStream(ms, aesEncrypt, CryptoStreamMode.Write))
            {
                cryptoStream.Write(Encoding.ASCII.GetBytes(message), 0, message.Length);
                cryptoStream.FlushFinalBlock();
                messageEncrypted = ms.ToArray();
            }

            byte[] fullEncryptedMessage = keyPlusIVEncrypted.Concat(messageEncrypted).ToArray();

            String toReturn = Encoding.ASCII.GetString(fullEncryptedMessage);

            return(fullEncryptedMessage);
        }
コード例 #24
0
ファイル: Encryption.cs プロジェクト: AJSoft/ddns-sharp
        public static string Encrypt(string str)
        {
            var input = Encoding.UTF8.GetBytes(str);

            var aes = AesCryptoServiceProvider.Create();

            aes.BlockSize = 128;
            aes.KeySize   = 128;
            aes.Key       = Key;
            aes.IV        = IV;

            var encryptor    = aes.CreateEncryptor();
            var ms           = new MemoryStream();
            var cryptoStream = new CryptoStream(ms, encryptor, CryptoStreamMode.Write);

            cryptoStream.Write(input, 0, input.Length);
            cryptoStream.FlushFinalBlock();
            var bytesOut = ms.ToArray();

            ms.Close();
            cryptoStream.Close();

            return(String.Concat(from b in bytesOut select b.ToString("X2")));
        }
コード例 #25
0
        public static String EncryptPassword(String Password)
        {
            if ((Password == null) || (Password.Length == 0))
            {
                return(null);
            }

            // neeed to replace with this on next issue:

            Aes AESAlg = AesCryptoServiceProvider.Create();

            AESAlg.IV  = BaseIV;
            AESAlg.Key = BaseKey;

            // Declare streams used to encrypt to an in memory array of bytes.
            MemoryStream msEncrypt = null;
            CryptoStream csEncrypt = null;
            StreamWriter swEncrypt = null;

            try
            {
                // Create a encrytor to perform the stream transform.
                ICryptoTransform encryptor =
                    AESAlg.CreateEncryptor(AESAlg.Key, AESAlg.IV);

                // Create the streams used for encryption.
                msEncrypt = new MemoryStream();
                csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write);
                swEncrypt = new StreamWriter(csEncrypt);

                // Write all data to the stream.
                swEncrypt.Write(Password);
            }
            catch
            {
                return("");
            }
            finally
            {
                // Close the streams.
                if (swEncrypt != null)
                {
                    swEncrypt.Close();
                }
                if (csEncrypt != null)
                {
                    csEncrypt.Close();
                }
                if (msEncrypt != null)
                {
                    msEncrypt.Close();
                }
                // Clear the AES Managed object.
                if (AESAlg != null)
                {
                    AESAlg.Clear();
                }
            }

            // Return the encrypted bytes from the memory stream.

            StringBuilder st = new StringBuilder();

            foreach (Byte bt in msEncrypt.ToArray())
            {
                st.AppendFormat("{0:x2}", bt);
            }
            //return msEncrypt.ToArray();
            return(st.ToString());
        }
コード例 #26
0
        public static String Decrypt(String EncryptedValue)
        {
            String DecryptedValue;

            if (EncryptedValue == null)
            {
                return("");
            }
            if (EncryptedValue.Length <= 1)  // need at least two characters
            {
                return("");
            }

            // convert the stream of numbers to byte array
            int NumberChars = EncryptedValue.Length;

            byte[] ToDecrypt = new byte[NumberChars / 2];
            for (int i = 0; i < NumberChars; i += 2)
            {
                ToDecrypt[i / 2] = Convert.ToByte(EncryptedValue.Substring(i, 2), 16);
            }



            // Create a new Rijndael object
            Aes AESAlg = AesCryptoServiceProvider.Create();

            AESAlg.IV  = BaseIV;
            AESAlg.Key = BaseKey;

            // Declare streams used to encrypt to an in memory array of bytes.
            MemoryStream msDecrypt = null;
            CryptoStream csDecrypt = null;
            StreamReader srDecrypt = null;

            try
            {
                // Use a decrytor to perform the stream transform.
                ICryptoTransform decryptor =
                    AESAlg.CreateDecryptor(AESAlg.Key, AESAlg.IV);

                // Create the streams used for decryption.
                msDecrypt = new MemoryStream(ToDecrypt);
                csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
                srDecrypt = new StreamReader(csDecrypt);

                // Read the decrypted bytes from the decrypting stream as string.
                DecryptedValue = srDecrypt.ReadToEnd();
            }
            catch (Exception ex)
            {
                String mess = ex.Message;
                return("");
            }
            finally
            {
                // Close the streams.
                if (srDecrypt != null)
                {
                    srDecrypt.Close();
                }
                if (csDecrypt != null)
                {
                    csDecrypt.Close();
                }
                if (msDecrypt != null)
                {
                    msDecrypt.Close();
                }
                // Clear the RijndaelAlg object.
                if (AESAlg != null)
                {
                    AESAlg.Clear();
                }
            }

            // and done
            return(DecryptedValue);
        }
コード例 #27
0
        private void Encode_Click(object sender, RoutedEventArgs e)
        {
            Passphrase pass = new Passphrase();

            pass.Owner = this;
            pass.ShowDialog();
            SymmetricAlgorithm sa;

            byte[]      iv = new byte[8];
            CipherMode  mode;
            PaddingMode padding = PaddingMode.Zeros;
            int         n       = 0;

            if (rbEnAES.IsChecked == true)
            {
                sa = AesCryptoServiceProvider.Create();
                n  = 32;
            }
            else
            {
                sa = TripleDESCryptoServiceProvider.Create();
                n  = 24;
            }
            if (n == 32)
            {
                iv = new byte[16];
            }
            byte[] key = new byte[n];
            if (rbEnCBC.IsChecked == true)
            {
                mode = CipherMode.CBC;
            }
            else
            {
                if (rbEnCFB.IsChecked == true)
                {
                    mode = CipherMode.CFB;
                }
                else
                {
                    mode = CipherMode.CTS;
                }
            }
            byte[] entrophy = new byte[32];

            /*  RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
             * rng.GetBytes(entrophy);*/
            SHA256 sha256 = new SHA256Cng();

            entrophy = sha256.ComputeHash(Encoding.UTF8.GetBytes(pass.pbPass.Password));//114 174 3
            byte[] salt = Encoding.UTF8.GetBytes("saltsaltsalt");
            // File.WriteAllBytes(@"D:\OSU\ЗПиД\ЗПиД6\Энтропия.txt", entrophy);
            if (rbGeneration.IsChecked == true)
            {
                Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(pass.pbPass.Password, salt, 10000);
                key = pbkdf2.GetBytes(n);
            }
            else
            {
                Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(pbKeyPhrase.Password, salt, 10000);
                key = pbkdf2.GetBytes(n);
            }
            byte[] encrypted = Encrypt(dataText, sa, key, iv, mode, padding);
            using (
                FileStream fs = new FileStream(@"D:\OSU\ЗПиД\ЗПиД6\Шифр.txt",
                                               FileMode.Create))
            {
                fs.Write(encrypted, 0, encrypted.Length);
            }
            byte[] keyTemp = Encoding.UTF8.GetBytes(pass.pbPass.Password);
            //  SHA256 sha256 = new SHA256Managed();
            keyTemp = sha256.ComputeHash(keyTemp);
            byte[] keyForkey = new byte[n];
            Array.Copy(keyTemp, keyForkey, n);
            //  byte[] en = Encrypt(key, sa, keyForkey, iv, mode, padding);
            byte[] en = ProtectedData.Protect(key, entrophy, DataProtectionScope.CurrentUser);
            using (
                FileStream fs_key = new FileStream(@"D:\OSU\ЗПиД\ЗПиД6\Пароль.txt",
                                                   FileMode.Create))
            {
                fs_key.Write(en, 0, en.Length);
            }
            MessageBox.Show("Выполнено!");
            tbEnOpenDialog.Text    = "";
            rbGeneration.IsChecked = true;
            pbKeyPhrase.Password   = "";
            rbGeneration_Checked(sender, e);
        }
コード例 #28
0
    // Create is static on Aes base class
    //
    public static bool TestCreate()
    {
        if (!(Aes.Create() is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - Aes.Create() is wrong type ({0})", Aes.Create().ToString());
            return(false);
        }

        if (!(AesCryptoServiceProvider.Create() is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - AesCSP.Create() is wrong type ({0})", AesCryptoServiceProvider.Create().ToString());
            return(false);
        }

        if (!(AesManaged.Create() is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - AesManaged.Create() is wrong type ({0})", AesManaged.Create().ToString());
            return(false);
        }

        if (!(Aes.Create("AES") is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - Aes.Create(AES) is wrong type ({0})", Aes.Create("AES").ToString());
            return(false);
        }

        if (!(Aes.Create("AesCryptoServiceProvider") is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - Aes.Create(AesCryptoServiceProvider) is wrong type ({0})", Aes.Create("AesCryptoServiceProvider").ToString());
            return(false);
        }

        if (!(Aes.Create("System.Security.Cryptography.AesCryptoServiceProvider") is AesCryptoServiceProvider))
        {
            Console.WriteLine("Error - Aes.Create(System.Security.Cryptography.AesCryptoServiceProvider) is wrong type ({0})", Aes.Create("System.Security.Cryptography.AesCryptoServiceProvider").ToString());
            return(false);
        }

        if (!(Aes.Create("AesManaged") is AesManaged))
        {
            Console.WriteLine("Error - Aes.Create(AesManaged) is wrong type ({0})", Aes.Create("AesManaged").ToString());
            return(false);
        }

        if (!(Aes.Create("System.Security.Cryptography.AesManaged") is AesManaged))
        {
            Console.WriteLine("Error - Aes.Create(System.Security.Cryptography.AesManaged) is wrong type ({0})", Aes.Create("System.Security.Cryptography.AesManaged").ToString());
            return(false);
        }

        if (!(Aes.Create("sYSTEM.sECURITY.cRYPTOGRAPHY.aESmANAGED") is AesManaged))
        {
            Console.WriteLine("Error - Aes.Create(sYSTEM.sECURITY.cRYPTOGRAPHY.aESmANAGED) is wrong type ({0})", Aes.Create("System.Security.Cryptography.AesManaged").ToString());
            return(false);
        }

        if (Aes.Create("Rijndael") != null)
        {
            Console.WriteLine("Error - Aes.Create(Rijndael) not null");
            return(false);
        }

        try
        {
            Aes.Create(null);
            Console.WriteLine("Error - Aes.Create(null) did not throw ArgumentNullException");
            return(false);
        }
        catch (ArgumentNullException)
        {
        }

        if (Aes.Create("Blah") != null)
        {
            Console.WriteLine("Error - Aes.Create(Blah) not null");
            return(false);
        }

        return(true);
    }
コード例 #29
0
        private void btDecode_Click(object sender, RoutedEventArgs e)
        {
            Passphrase pass = new Passphrase();

            pass.Owner = this;
            pass.ShowDialog();
            byte[] decrypted;
            using (FileStream fileStream = File.OpenRead(file))
            {
                decrypted = new byte[fileStream.Length];
                fileStream.Read(decrypted, 0, decrypted.Length);
            }
            SymmetricAlgorithm sa;

            CipherMode  mode;
            PaddingMode padding = PaddingMode.None;

            byte[] keyT   = Encoding.UTF8.GetBytes(pass.pbPass.Password);
            SHA256 sha256 = new SHA256Cng();

            keyT = sha256.ComputeHash(keyT);
            int n = 0;

            if (rbDeAES.IsChecked == true)
            {
                sa = AesCryptoServiceProvider.Create();
                n  = 32;
            }
            else
            {
                sa = TripleDESCryptoServiceProvider.Create();
                n  = 24;
            }
            byte[] key = new byte[n];
            Array.Copy(keyT, key, n);
            byte[] iv = new byte[8];
            if (n == 24)
            {
                iv = new byte[8];
            }
            else
            {
                iv = new byte[16];
            }
            if (rbEnCBC.IsChecked == true)
            {
                mode = CipherMode.CBC;
            }
            else
            {
                if (rbEnCFB.IsEnabled)
                {
                    mode = CipherMode.CFB;
                }
                else
                {
                    mode = CipherMode.CTS;
                }
            }
            byte[] entrophy = sha256.ComputeHash(Encoding.UTF8.GetBytes(pass.pbPass.Password)); //File.ReadAllBytes(@"D:\OSU\ЗПиД\ЗПиД6\Энтропия.txt");//113 183
                                                                                                // SHA256 sha256 = new SHA256Cng();
                                                                                                //  entrophy = sha256.ComputeHash(entrophy);
            using (FileStream fstream = File.OpenRead(@"D:\OSU\ЗПиД\ЗПиД6\Пароль.txt"))
            {
                byte[] keyTemp = new byte[fstream.Length];
                fstream.Read(keyTemp, 0, keyTemp.Length);
                key = ProtectedData.Unprotect(keyTemp, entrophy, DataProtectionScope.CurrentUser);
                //  keyT = Decrypt(temp, sa, key, iv, mode, padding);
            }
            //Array.Copy(keyT, key, n);
            byte[] decr   = Decrypt(decrypted, sa, key, iv, mode, padding);
            string result = Encoding.UTF8.GetString(decr);

            File.WriteAllText(@"C:\Users\Nastya\Desktop\Университет\ЗПиД\ЗПиД6\Результат.txt", result, Encoding.UTF8);
            MessageBox.Show("Выполнено!");
            tbDeOpenDialog.Text = "";
        }
コード例 #30
0
        /// <summary>対称アルゴリズム暗号化サービスプロバイダ生成</summary>
        /// <param name="esa">EnumSymmetricAlgorithm</param>
        /// <param name="cm">CipherMode</param>
        /// <param name="pm">PaddingMode</param>
        /// <returns>SymmetricAlgorithm</returns>
        private SymmetricAlgorithm CreateSymmetricAlgorithm(EnumSymmetricAlgorithm esa, CipherMode cm, PaddingMode pm)
        {
            #region Constructor
            SymmetricAlgorithm sa = null;

            #region Aes
            if (esa.HasFlag(EnumSymmetricAlgorithm.AES_CSP))
            {
                // AesCryptoServiceProviderサービスプロバイダ
                sa = AesCryptoServiceProvider.Create(); // devps(1703)
            }
            else if (esa.HasFlag(EnumSymmetricAlgorithm.AES_M))
            {
                // AesManagedサービスプロバイダ
                sa = AesManaged.Create(); // devps(1703)
            }
#if NET45 || NET46
#else
            else if (esa.HasFlag(EnumSymmetricAlgorithm.AES_CNG))
            {
                // AesCngサービスプロバイダ
                sa = AesCng.Create(); // devps(1703)
            }
#endif
            #endregion

            #region TripleDES
            else if (esa.HasFlag(EnumSymmetricAlgorithm.TDES_CSP))
            {
                // TripleDESCryptoServiceProviderサービスプロバイダ
                sa = TripleDESCryptoServiceProvider.Create(); // devps(1703)
            }

#if NET45 || NET46
#else
            else if (esa.HasFlag(EnumSymmetricAlgorithm.TDES_CNG))
            {
                // TripleDESCngサービスプロバイダ
                sa = TripleDESCng.Create(); // devps(1703)
            }
#endif
            #endregion

            #region Others
            else if (esa.HasFlag(EnumSymmetricAlgorithm.DES_CSP))
            {
                // DESCryptoServiceProviderサービスプロバイダ
                sa = DESCryptoServiceProvider.Create(); // devps(1703)
            }

            else if (esa.HasFlag(EnumSymmetricAlgorithm.RC2_CSP))
            {
                // RC2CryptoServiceProviderサービスプロバイダ
                sa = RC2CryptoServiceProvider.Create(); // devps(1703)
            }

            else if (esa.HasFlag(EnumSymmetricAlgorithm.Rijndael_M))
            {
                // RijndaelManagedサービスプロバイダ
                sa = RijndaelManaged.Create(); // devps(1703)
            }
            #endregion

            else
            {
                throw new ArgumentException(
                          PublicExceptionMessage.ARGUMENT_INCORRECT, "EnumSymmetricAlgorithm esa");
            }
            #endregion

            #region Options
            // cmが設定されている場合。
            if (cm != 0)
            {
                sa.Mode = cm;
            }

            // pmが設定されている場合。
            if (pm != 0)
            {
                sa.Padding = pm;
            }
            #endregion

            return(sa);
        }