PROTECAO DA MEMORIA - CRYPTOGRAFIA DPAPI

 Tópico anterior Próximo tópico Novo tópico

PROTECAO DA MEMORIA - CRYPTOGRAFIA DPAPI

C#

 Compartilhe  Compartilhe  Compartilhe
#398793 - 30/03/2012 14:29:37

LUIS HERRERA
NOVA ODESSA
Cadast. em:Julho/2005


Última edição em 30/03/2012 22:08:18 por LUIS HERRERA

Bom dia pessoal, descobri hoje que o framework Net proteger dados em tempo de execução.
Peguei um exemplo no site MSDN, só que ele aceita apenas texto com 16 caracteres. Tentei alterar para permitir qualquer tamanho de string, só que não consegui.

Será que alguém sabe dizer o que tem de alterar no código para aceitar texto maiores?

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

public class MemoryProtectionSample
{
    public static void Main()
    {
        Run();
    }

    public static void Run()
    {
        try
        {
            ///////////////////////////////
            // Memory Encryption - ProtectedMemory
            ///////////////////////////////

            // Create the original data to be encrypted (The data length should be a multiple of 16).
            byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");  //aqui vai o texto, se colocar + dá erro.

            Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
            Console.WriteLine("Encrypting...");

            // Encrypt the data in memory.
            EncryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);

            Console.WriteLine("Encrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
            Console.WriteLine("Decrypting...");

            // Decrypt the data in memory.
            DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);

            Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
        }
        catch (Exception e)
        {
            Console.WriteLine("ERROR: " + e.Message);
        }
    }

    public static void EncryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope )
    {
        if (Buffer.Length <= 0)
            throw new ArgumentException("Buffer");
        if (Buffer == null)
            throw new ArgumentNullException("Buffer");


        // Encrypt the data in memory. The result is stored in the same same array as the original data.
        ProtectedMemory.Protect(Buffer, Scope);

    }

    public static void DecryptInMemoryData(byte[] Buffer, MemoryProtectionScope Scope)
    {
        if (Buffer.Length <= 0)
            throw new ArgumentException("Buffer");
        if (Buffer == null)
            throw new ArgumentNullException("Buffer");


        // Decrypt the data in memory. The result is stored in the same same array as the original data.
        ProtectedMemory.Unprotect(Buffer, Scope);

    }

}



LH
Preserve a Natureza
Faça Coleta Seletiva e Cuide da Fauna e Flora por onde passa ou vive.
Dedique um tempo ao seu espírito, mente sã e corpo são.
Você e sua famí­lia serão os maiores beneficiado.

#398797 - 30/03/2012 14:47:23

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
O método GetBytes, das classes de encriptação do namespace UnicodeEncoding, transformam uma string em um array contendo os códigos da tabela de caracteres(conforme a classe, no seu caso ASCII) de cada um dos caracteres passados na string parâmetro. Resumindo, ele transforma uma string em um array de códigos ASC.
O ponto chave é que ela é realmente limitada, retornando no máximo 16 caracteres, por isso você não consegue encriptar textos maiores. Deve ter algum overload ou algum outro método nessa classe que o parâmetro seja livre...

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


Resposta escolhida #398837 - 30/03/2012 18:23:38

PROGRAMADORVB6
LISBOA
Cadast. em:Janeiro/2004


Olá amigo Luís.
Acho que terá que configurar para Múltiplos de 16.
Ou seja : 16+16+16+16+16+16+16......=112 em vez de só definir para 16
Assim sendo terá que mudar para :
byte[] entropy = new byte[112];
Mas leia o artigo : http://www.dotnetspider.com/resources/4329-Data-Encryption-Decryption-using-DPAPI-classes.aspx

Espero o ter ajudado.
Boa sorte
Até+
Programadorvb6

______________________________________________________________________________

Que minha coragem seja maior que meu medo e que minha força seja tão grande quanto minha fé.


#398844 - 30/03/2012 22:06:02

LUIS HERRERA
NOVA ODESSA
Cadast. em:Julho/2005


ProgramadorVB6 muito obrigado, resolveu. Só tive de adaptar o código para o Framework 3.5 e ficou perfeito.

LH
Preserve a Natureza
Faça Coleta Seletiva e Cuide da Fauna e Flora por onde passa ou vive.
Dedique um tempo ao seu espírito, mente sã e corpo são.
Você e sua famí­lia serão os maiores beneficiado.

 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por LUIS HERRERA em 30/03/2012 22:09:11