예제 #1
0
        static void Main()
        {
            const string ORIGINAL = "Muito secreto, as informações importantes que não pode cair nas mãos erradas.";

            var rsaParams = new RsaWithRsaParameterKey();

            rsaParams.AtribuirNovaChave();

            WriteLine("Demonstração de criptografia hibrida com integridade em .NET");
            WriteLine("-------------------------------------------------------------------------");
            WriteLine();

            try
            {
                var blocoCriptografado = CriptografarDados(ORIGINAL, rsaParams);
                var descriptografado   = DescriptografarDados(blocoCriptografado, rsaParams);

                WriteLine($"Mensagem original: {ORIGINAL}");
                WriteLine();
                WriteLine($"Mensagem depois de descriptografada: {descriptografado}");
            }
            catch (CryptographicException exception)
            {
                WriteLine($"Error: {exception.Message}");
            }

            ReadKey();
        }
예제 #2
0
        private static PacoteCriptografado CriptografarDados(string original, RsaWithRsaParameterKey rsaParams)
        {
            var aes = new AesEncryption();

            var sessaoDaChave       = NumerosAleatorios.GerarNumerosAletorios(32);
            var pacoteCriptografado = new PacoteCriptografado
            {
                Iv = NumerosAleatorios.GerarNumerosAletorios(16)
            };

            pacoteCriptografado.DadosCriptografados = aes.Criptografar(Encoding.UTF8.GetBytes(original), sessaoDaChave,
                                                                       pacoteCriptografado.Iv);

            pacoteCriptografado.ChaveDaSessaoCriptografada = rsaParams.CriptografarDados(sessaoDaChave);

            using (var hmac = new HMACSHA256(sessaoDaChave))
            {
                pacoteCriptografado.Hmac = hmac.ComputeHash(pacoteCriptografado.DadosCriptografados);
            }

            return(pacoteCriptografado);
        }
예제 #3
0
        private static string DescriptografarDados(PacoteCriptografado blocoCriptografado, RsaWithRsaParameterKey rsaParams)
        {
            var aes = new AesEncryption();

            var sessaoDaChaveDescriptografada =
                rsaParams.DescriptografarDados(blocoCriptografado.ChaveDaSessaoCriptografada);

            using (var hmac = new HMACSHA256(sessaoDaChaveDescriptografada))
            {
                var hmacParaVerificar = hmac.ComputeHash(blocoCriptografado.DadosCriptografados);

                if (!Compare(blocoCriptografado.Hmac, hmacParaVerificar))
                {
                    throw new CryptographicException("HMAC para a descodificação não corresponde pacote criptografado.");
                }
            }

            var dadosDescriptografados = aes.Descriptografar(blocoCriptografado.DadosCriptografados,
                                                             sessaoDaChaveDescriptografada, blocoCriptografado.Iv);

            return(Encoding.UTF8.GetString(dadosDescriptografados));
        }