Pergunta

Eu preciso usar algum mecanismo de criptografia em um dos projeto que eu estou trabalhando. Eu estava explorando criptografia RSA e escreveu alguns programas de amostra para aprender.

Eu entendo que o tamanho do bloco de criptografia RSA é de 16 bytes. Então eu dei a string "12345678" como entrada para abaixo de função:

public static string Encrypt (string input) {
    var byteConverter = new UnicodeEncoding ();

    RSACryptoServiceProvider cruptoEngine = new RSACryptoServiceProvider();
    byte[] output = cruptoEngine.Encrypt (byteConverter.GetBytes (input), false);
    return BytesToString (output); //BytesToString () converts the bytes to hex string
}

Agora, a string encriptada que eu recebo é de 128 bytes (256 caracteres hexadecimais). Essa seqüência é grande demais para mim. Eu estava meio que esperando que eu iria receber 16 bytes de dados criptografados se eu der 16 bytes de dados simples. Estou fazendo algo errado? É isso que é suposto acontecer? Posso alguma forma encurtar dados criptografados?

Foi útil?

Solução

Você está enganado. RSA não é uma cifra de bloco, de modo que você não pode realmente falar sobre o tamanho do bloco do mesmo.

A saída de uma criptografia RSA irá ter o mesmo comprimento que o módulo RSA. Você ainda não indicou nenhuma chave RSA no seu código, de modo que o tempo de execução (tanto quanto me lembro) usar uma chave padrão. Essa chave aparentemente tem um módulo de 1024 bits, o que explica o comprimento de saída.

Você pode querer olhar para criptografia AES vez. Por muitas razões que você deve normalmente só usar RSA para criptografar uma chave e, em seguida, usar AES ou um algoritmo de cifra simétrica semelhante ao criptografar o texto real.

AES é uma cifra de bloco com tamanho de bloco de 16 bytes, para que a vontade (dependendo do preenchimento você usa e como você transportar o seu vector de inicialização) criptografar 16 bytes de dados simples para 16 bytes de dados criptografados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top