Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DaniloTec

Criptografar e descriptografar uma variável para URL - RSA - C#

Recommended Posts

Boa tarde gente.

Criei uma classe e 2 métodos, um para criptografar e outro para descriptografar uma variável que será o parâmetro de uma URL.

public string retornaCrypto(string str) {
		RSACryptoServiceProvider myrsa = new RSACryptoServiceProvider();
		System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();//Encode String to Convert to Bytes
		Byte[] dado = encoding.GetBytes(str);//convert to Bytes
		Byte[] crypto = myrsa.Encrypt(dado, false);
		string strCrypto = "";
		for (int i = 0; i < crypto.Length; i++){
			strCrypto += crypto[i];
		}
		return strCrypto;
	}

	public string retornaDecrypto(string str)
	{
		RSACryptoServiceProvider myrsa = new RSACryptoServiceProvider();
		System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();//Encode String to Convert to Bytes
		Byte[] dado = encoding.GetBytes(str);//convert to Bytes
		Byte[] decrypto = myrsa.Decrypt(dado, false);//decrypt 
		string dData = encoding.GetString(decrypto); //encode bytes back to string 
		string strDecrypto = "";
		for (int i = 0; i < decrypto.Length; i++){
			strDecrypto = dData[i].ToString();
		}
		return strDecrypto;
	}

Funciona certinho, o problema é que quando eu mando criptografar uma variável de id, por exemplo o número "9", ele retorna uma variável (criptografada) muito grande, não sendo muito interessante para se colocar como parâmetro de uma URL.

Outro problema é que quando eu pego essa mesma variável e mando descritografar ele resulta um erro dizendo que a variável excede o número de 128 bytes. Mas foi ele mesmo quem criou essa variável. :blink:

 

Erro:

The data to be decrypted exceeds the maximum for this modulus of 128 bytes

Como eu faço pra diminuir a variável criptografada e conseguir depois descriptografar?

 

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sonho que um dia no C# teremos um método chamado Encripta(string) e Decripta(string), sem precisar ficar usando bytes.

Não sei muito de criptografia, já conferiu para ver se o algoritmo está implementado corretamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ajudou muito não. Pelo menos eu não vi nada que me ajudasse a diminuir o resultado a criptografia. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sonho que um dia no C# teremos um método chamado Encripta(string) e Decripta(string), sem precisar ficar usando bytes.

Não sei muito de criptografia, já conferiu para ver se o algoritmo está implementado corretamente?

Na web o MD5 não precisa trabalhar com bytes, mas em compensação não faz a descriptografia (teoricamente).

Agora RSACryptoServiceProvider eu não conheço, por isso só indiquei o site para que pudesse dar uma comparada nos códigos.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os dois métodos que eu fiz funcionam certinho. Criptografa e descriptografa perfeitamente.

O único problema é o tamanho da criptografia. Por exemplo, para o número 9 ele gera:

43192651762439512166253811111213122922225016819111916520285558165525021571683728
472438015915625314291951551571926738514399113191125202231100167202155139210184199
189114226782810149243133162161249148382722255824179757515523134137253215881618247
2819039892241962361071351603914620677594111384842281518119564136371454595221
Isso é totalmente inviável pra colocar em uma URL. Por isso estou tentando encontrar uma forma de diminuir isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu preciso é o seguinte:

Enviar para o e-mail de um cliente uma URL com um parâmetro (id) para ele acessar um conteúdo exclusivo.

É este parâmetro (id) que eu quero criptografar, entende?

 

Existe uma outra solução? Eu estou aceitando sugestões.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.