예제 #1
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);
        }
예제 #2
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));
        }