コード例 #1
0
        public SymetricKey Generate()
        {
            var symetricKey = new SymetricKey();
            SymmetricAlgorithm algorithm = new AesManaged();

            symetricKey.Key  = algorithm.Key;
            symetricKey.Salt = algorithm.IV;
            return(symetricKey);
        }
コード例 #2
0
ファイル: SerializationTest.cs プロジェクト: aluitink/Ojibwe
        public void SymetricKeySerializationTest()
        {
            Random random = new Random();

            SymetricKey key1 = new SymetricKey();
            key1.Iv = new byte[16];
            key1.Key = new byte[24];
            random.NextBytes(key1.Iv);
            random.NextBytes(key1.Key);

            var stream = key1.ToStream();

            SymetricKey key2 = new SymetricKey(stream);

            Assert.True(key1.Iv.SequenceEqual(key2.Iv));
            Assert.True(key1.Key.SequenceEqual(key2.Key));
        }
コード例 #3
0
ファイル: SymetricAes.cs プロジェクト: juandrn/NetXP
        public byte[] Decrypt(byte[] encryptedMessage, SymetricKey symetricKey)
        {
            SymmetricAlgorithm algorithm = Aes.Create();

            algorithm.Key  = symetricKey.Key;
            algorithm.IV   = symetricKey.Salt;
            algorithm.Mode = Mode;

            ICryptoTransform transform = algorithm.CreateDecryptor(symetricKey.Key, symetricKey.Salt);

            using MemoryStream buffer = new(encryptedMessage);
            using CryptoStream stream = new(buffer, transform, CryptoStreamMode.Read);
            using MemoryStream mo     = new();
            stream.CopyTo(mo);
            mo.Position = 0;
            return(mo.ToArray());
        }
コード例 #4
0
        public void NC_ISymetric_Encrypt_And_Decrypt_WithGreaterThan16Bytes()
        {
            SymetricKey SymetricKey = new SymetricKey();

            SymetricKey.Key = Encoding.ASCII.GetBytes("MyPasswordMyPassword");

            string sText = "Encriptando texto.";

            byte[] aText = Encoding.ASCII.GetBytes(sText);

            var aEncryptedText   = this.ISymetric.Encrypt(aText, SymetricKey);
            var aUnencryptedText = this.ISymetric.Decrypt(aEncryptedText, SymetricKey);

            string unencryptedText = Encoding.ASCII.GetString(aUnencryptedText);

            Assert.AreEqual(sText, unencryptedText);
        }
コード例 #5
0
ファイル: Symetric_Tests.cs プロジェクト: juandrn/NetXP
        public void NF_ISymetric_Encrypt_And_Decrypt_WithLessOf16Bytes()
        {
            SymetricKey SymetricKey = new SymetricKey()
            {
                Key = Encoding.ASCII.GetBytes("MyPassword")
            };

            string sText = "Encriptando texto.";

            byte[] aText = Encoding.ASCII.GetBytes(sText);

            var aEncryptedText   = this.ISymetric.Encrypt(aText, SymetricKey);
            var aUnencryptedText = this.ISymetric.Decrypt(aEncryptedText, SymetricKey);

            string sUnencryptedText = Encoding.ASCII.GetString(aUnencryptedText);

            Assert.AreEqual(sText, sUnencryptedText);
        }
コード例 #6
0
        public void NC_ISymetric_Encrypt_And_Decrypt()
        {
            SymetricKey SymetricKey = new SymetricKey();

            var aes = Aes.Create();

            SymetricKey.Key  = aes.Key;
            SymetricKey.Salt = aes.IV;

            string sText = "Encriptando texto con llave aleatoria.";

            byte[] aText = Encoding.ASCII.GetBytes(sText);

            var aEncryptedText   = this.ISymetric.Encrypt(aText, SymetricKey);
            var aUnencryptedText = this.ISymetric.Decrypt(aEncryptedText, SymetricKey);

            string sUnencryptedText = Encoding.ASCII.GetString(aUnencryptedText);

            Assert.AreEqual(sText, sUnencryptedText);
        }
コード例 #7
0
ファイル: Symetric_Tests.cs プロジェクト: juandrn/NetXP
        public void NF_ISymetric_Encrypt_And_Decrypt()
        {
            SymetricKey symetricKey = new SymetricKey();

            AesManaged aes = new AesManaged();

            symetricKey.Key  = aes.Key;
            symetricKey.Salt = aes.IV;

            string text = "Encriptando texto con llave aleatoria.";

            byte[] aText = Encoding.ASCII.GetBytes(text);

            var aEncryptedText   = this.ISymetric.Encrypt(aText, symetricKey);
            var aUnencryptedText = this.ISymetric.Decrypt(aEncryptedText, symetricKey);

            string sUnencryptedText = Encoding.ASCII.GetString(aUnencryptedText);

            Assert.AreEqual(text, sUnencryptedText);
        }
コード例 #8
0
        //T could be:
        //      AesManaged
        //		TripleDESCryptoServiceProvider
        //		RijndaelManaged
        public byte[] Encrypt <T>(byte[] aNoEncryptedMessage, SymetricKey SymetricKey)
            where T : SymmetricAlgorithm, new()
        {
            SymmetricAlgorithm algorithm = new T();

            algorithm.Key  = SymetricKey.Key;
            algorithm.IV   = SymetricKey.Salt;
            algorithm.Mode = this.Mode;
            //algorithm.Padding = PaddingMode.PKCS7;

            ICryptoTransform transform = algorithm.CreateEncryptor(SymetricKey.Key, SymetricKey.Salt);

            using (MemoryStream buffer = new MemoryStream())
            {
                using (CryptoStream stream = new CryptoStream(buffer, transform, CryptoStreamMode.Write))
                {
                    stream.Write(aNoEncryptedMessage, 0, aNoEncryptedMessage.Length);
                }
                return(buffer.ToArray());
            }
        }
コード例 #9
0
ファイル: SymetricAes.cs プロジェクト: juandrn/NetXP
        //T could be:
        //      AesManaged
        //		TripleDESCryptoServiceProvider
        //		RijndaelManaged
        public byte[] Encrypt(byte[] noEncryptedMessage, SymetricKey symetricKey)
        {
            SymmetricAlgorithm algorithm = Aes.Create();

            algorithm.Key  = symetricKey.Key;
            algorithm.IV   = symetricKey.Salt;
            algorithm.Mode = Mode;
            //algorithm.Padding = PaddingMode.PKCS7;

            ICryptoTransform transform = algorithm.CreateEncryptor(symetricKey.Key, symetricKey.Salt);

            using (MemoryStream buffer = new())
            {
                using (CryptoStream stream = new(buffer, transform, CryptoStreamMode.Write))
                {
                    stream.Write(noEncryptedMessage, 0, noEncryptedMessage.Length);
                    stream.FlushFinalBlock();//Error:https://stackoverflow.com/a/40564155
                }
                return(buffer.ToArray());
            }
        }
コード例 #10
0
ファイル: SLPClientConnector.cs プロジェクト: juandrn/NetXP
        private void ReceivingEncryptedMessage(IAsymetricCrypt asymetricCrypt)
        {
            //Receiving the rest of header.
            int iSymetricLength = BitHelper.ToInt32(littleBuffer, HEADER_TYPE_3_SYMKEY_LENGTH_OFFSET);//Length of message
            int iBodyLength     = BitHelper.ToInt32(littleBuffer, HEADER_TYPE_3_BODY_LENGTH_OFFSET);

            ValidatingMaxOfSizeToReceive(iSymetricLength, "Symetric Key Length");
            ValidatingMaxOfSizeToReceive(iBodyLength, "Body Length");

            //Saving encrypted symetric key in little buffer.
            this.ReceiveAll(littleBuffer, iSymetricLength);

            //Saving encrypted body in dynamic buffer.
            var aDinamicBuffer = new byte[iBodyLength];//Ugly new if is big data

            this.ReceiveAll(aDinamicBuffer, iBodyLength);

            #region For Debuging
#if DEBUG
            //byte[] header = new byte[4 + 4 + 4];
            //header[HEADER_TYPE_OFFSET] = TYPE_MESSAGE;
            //ByteHelper.UIntToByte(header, HEADER_TYPE_3_SYMKEY_LENGTH_OFFSET, (uint)iSymetricLength);
            //ByteHelper.UIntToByte(header, HEADER_TYPE_3_BODY_LENGTH_OFFSET, (uint)iBodyLength);
            //var aReceivedHash = hash.Generate(new ByteArray(header.Concat(aLittleBuffer.Take(iSymetricLength).ToArray()).Concat(aDinamicBuffer).ToArray()));
            //this.logger.Debug($"Receiving Message Hash \"{BitConverter.ToString(aReceivedHash)}\", BodyLenth={iBodyLength}");

            //var aPUBKEYToDecrypt = this.hash.Generate(new ByteArray(this.serializeT.Serialize(asymetricCrypt.GetPublicKey())));
            //this.logger.Debug($"PUBKEY to decrypt the message {BitConverter.ToString(aPUBKEYToDecrypt)}");
#endif
            #endregion

            //SymetricKey Decrypting and deserialization
            byte[]      aSymetricKey = asymetricCrypt.Decrypt(littleBuffer.Take(iSymetricLength).ToArray());
            SymetricKey symetricKey  = this.serializeT.Deserialize <SymetricKey>(aSymetricKey);

            //Decrypting and Decrompres and deserialization of Body with symetric key
            var aDecryptedMessageCompressed = this.symetric.Decrypt(aDinamicBuffer.Take(iBodyLength).ToArray(), symetricKey);
            aDecryptedMessage = this.compression.Decrompress(new ByteArray(aDecryptedMessageCompressed));
            aDinamicBuffer    = null;
        }
コード例 #11
0
        public byte[] Decrypt <T>(byte[] aEncryptedMessage, SymetricKey SymetricKey)
            where T : SymmetricAlgorithm, new()
        {
            DeriveBytes rgb = new Rfc2898DeriveBytes(SymetricKey.Key, SymetricKey.Salt, SymetricKey.Iteration);

            SymmetricAlgorithm algorithm = new T();

            algorithm.Key = SymetricKey.Key;
            algorithm.IV  = SymetricKey.Salt;

            algorithm.Mode = this.Mode;
            //algorithm.Padding = PaddingMode.PKCS7;

            ICryptoTransform transform = algorithm.CreateDecryptor(SymetricKey.Key, SymetricKey.Salt);

            using (MemoryStream buffer = new MemoryStream(aEncryptedMessage))
                using (CryptoStream stream = new CryptoStream(buffer, transform, CryptoStreamMode.Read))
                    using (MemoryStream mo = new MemoryStream())
                    {
                        stream.CopyTo(mo);
                        mo.Position = 0;
                        return(mo.ToArray());
                    }
        }
コード例 #12
0
 public byte[] Decrypt(byte[] aEncryptedMessage, SymetricKey SymetricKey)
 {
     return(Decrypt <AesManaged>(aEncryptedMessage, SymetricKey));
 }
コード例 #13
0
 public byte[] Encrypt(byte[] aNoEncryptedMessage, SymetricKey SymetricKey)
 {
     return(Encrypt <AesManaged>(aNoEncryptedMessage, SymetricKey));
 }
コード例 #14
0
ファイル: CryptoUtility.cs プロジェクト: aluitink/Ojibwe
        //internal static bool TryEncryptStream(Stream inputStream, Stream outputStream, out SymetricKey symenticKey)
        //{
        //    using (AesManaged aes = new AesManaged())
        //    {
        //        symenticKey = new SymetricKey();
        //        try
        //        {
        //            aes.GenerateIV();
        //            aes.GenerateKey();
        //            symenticKey.Iv = aes.IV;
        //            symenticKey.Key = aes.Key;
        //            string tempFile = Path.GetTempFileName();
        //            FileStream tempWriteFileStream = new FileStream(tempFile, FileMode.Create);
        //            CryptoStream cryptoStream = new CryptoStream(tempWriteFileStream, aes.CreateEncryptor(),
        //                CryptoStreamMode.Write);
        //            inputStream.CopyTo(cryptoStream);
        //            cryptoStream.FlushFinalBlock();
        //            cryptoStream.Close();
        //            tempWriteFileStream.Close();
        //            using (var tempReadFileStream = new FileStream(tempFile, FileMode.Open))
        //            {
        //                tempReadFileStream.CopyTo(outputStream);
        //                outputStream.Position = 0;
        //            }
        //            return true;
        //        }
        //        catch (Exception)
        //        {
        //            return false;
        //        }
        //    }
        //}
        internal static bool TryEncryptStream(Stream inputStream, Stream outputStream, out SymetricKey symenticKey)
        {
            using (AesManaged aes = new AesManaged())
            {
                symenticKey = new SymetricKey();

                try
                {
                    aes.GenerateIV();
                    aes.GenerateKey();

                    symenticKey.Iv = aes.IV;
                    symenticKey.Key = aes.Key;

                    CryptoStream cryptoStream = new CryptoStream(outputStream, aes.CreateEncryptor(), CryptoStreamMode.Write);

                    inputStream.CopyTo(cryptoStream);

                    cryptoStream.FlushFinalBlock();
                    outputStream.Position = 0;

                    return true;
                }
                catch (Exception)
                {
                    return false;
                }
            }
        }
コード例 #15
0
ファイル: CryptoUtility.cs プロジェクト: aluitink/Ojibwe
        //internal static bool TryDecryptStream(Stream inputStream, Stream outputStream, SymetricKey symenticKey)
        //{
        //    using (AesManaged aes = new AesManaged())
        //    {
        //        try
        //        {
        //            aes.IV = symenticKey.Iv;
        //            aes.Key = symenticKey.Key;
        //            string tempFile = Path.GetTempFileName();
        //            FileStream tempWriteFileStream = new FileStream(tempFile, FileMode.Create);
        //            CryptoStream cryptoStream = new CryptoStream(tempWriteFileStream, aes.CreateDecryptor(),
        //                CryptoStreamMode.Write);
        //            inputStream.CopyTo(cryptoStream);
        //            cryptoStream.FlushFinalBlock();
        //            cryptoStream.Clear();
        //            tempWriteFileStream.Close();
        //            using (var tempReadFileStream = new FileStream(tempFile, FileMode.Open))
        //            {
        //                tempReadFileStream.CopyTo(outputStream);
        //                outputStream.Position = 0;
        //            }
        //            return true;
        //        }
        //        catch (Exception)
        //        {
        //            return false;
        //        }
        //    }
        //}
        internal static bool TryDecryptStream(Stream inputStream, Stream outputStream, SymetricKey symenticKey)
        {
            using (AesManaged aes = new AesManaged())
            {
                try
                {
                    aes.IV = symenticKey.Iv;
                    aes.Key = symenticKey.Key;

                    CryptoStream cryptoStream = new CryptoStream(outputStream, aes.CreateDecryptor(), CryptoStreamMode.Write);

                    inputStream.CopyTo(cryptoStream);

                    cryptoStream.FlushFinalBlock();
                    outputStream.Position = 0;

                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }