Jump to content
User LoL

Descriptografia de AES

Recommended Posts

User LoL

Olá a todos, estive dando uma olhada em alguns métodos de criptografia e me interessei por um em específico, pois é seguro e suporta acentuação e caracteres especiais, falo de AES (Rijndael). Criei um projeto, com 4 textbox: 1.Senha 2.Texto a ser criptografado 3.Texto criptografado 4.Descriptografado. e Button1=Criptografa, Button2:Descriotografa.

O problema é que, esses dados criptografados só são válidos quando o software está rodando, eu copio eles e não consigo descriptografar depois. Exemplo, criptografo "123" e ele gera"t&estcriptografado", depois eu copio o código criptografado, fecho o programa, abro novamente e tento descriptografar "t&estcriptografado" mas ele não reconhece como criptografado, oque está errado? Olhem o código:

Imports System.Security.Cryptography
Imports System.Security.Cryptography.Aes
Imports System.IO
Imports System.Text
Public Class Form1
Dim criptografado As Byte()
Dim senha As String = ""
Dim mensagem As String = ""
Dim camada() As Byte = {0&, 11&, 1&, 10&, 99&, 10&, 1&, 11&, 0&}
Dim algoritmo As New AesManaged()
Private Sub moveBytes(ByVal fonte As Stream, ByVal destino As Stream)
	Dim bytes(2048) As Byte
	Dim contador = fonte.Read(bytes, 0, bytes.Length - 1)
	While (0 <> contador)
		destino.Write(bytes, 0, contador)
		contador = fonte.Read(bytes, 0, bytes.Length - 1)
	End While
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
	senha = TextBox1.Text
	mensagem = TextBox2.Text
	Dim chave As New Rfc2898DeriveBytes(senha, camada)
	algoritmo.Key = chave.GetBytes(16)
	algoritmo.IV = chave.GetBytes(16)
	Dim fonteBytes() As Byte = New System.Text.UnicodeEncoding().GetBytes(mensagem)
	Using StreamFonte = New MemoryStream(fonteBytes)
		Using StreamDestino As New MemoryStream()
			Using crypto As New CryptoStream(StreamFonte, algoritmo.CreateEncryptor(), CryptoStreamMode.Read)
				moveBytes(crypto, StreamDestino)
				criptografado = StreamDestino.ToArray()
			End Using
		End Using
	End Using
	'MessageBox.Show(String.Format("Mensagem : {0}{1} Criptografada : {2}", mensagem, Environment.NewLine, Convert.ToBase64String(textoCifrado)))
	TextBox3.Text = Convert.ToBase64String(criptografado)
End Sub

Private Sub moveBytes2(ByVal fonte2 As Stream, ByVal destino2 As Stream)
	Dim bytes2(2048) As Byte
	Dim contador2 = fonte2.Read(bytes2, 0, bytes2.Length - 1)
	While (0 <> contador2)
		destino2.Write(bytes2, 0, contador2)
		contador2 = fonte2.Read(bytes2, 0, bytes2.Length - 1)
	End While
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
	Try
		Dim senha As String = ""
		Dim mensagem As String = ""
		Dim camada() As Byte = {0&, 11&, 1&, 10&, 99&, 10&, 1&, 11&, 0&}
		senha = TextBox1.Text
		mensagem = TextBox2.Text
		If (criptografado Is Nothing) Then
			MessageBox.Show("Criptografia não reconhecida!!!")
			Return
		End If
		Dim chave As New Rfc2898DeriveBytes(senha, camada)
		Dim algoritmo = New AesManaged()
		algoritmo.Key = chave.GetBytes(16)
		algoritmo.IV = chave.GetBytes(16)
		Using StreamFonte2 = New MemoryStream(criptografado)
			Using StreamDestino2 As New MemoryStream()
				Using crypto2 As New CryptoStream(StreamFonte2, algoritmo.CreateDecryptor(), CryptoStreamMode.Read)
					moveBytes2(crypto2, StreamDestino2)
					Dim bytesDescriptografados2() As Byte = StreamDestino2.ToArray()
					Dim mensagemDescriptografada2 = New UnicodeEncoding().GetString(bytesDescriptografados2)
					TextBox4.Text = mensagemDescriptografada2
				End Using
			End Using
		End Using
	Catch ex As Exception
		MsgBox(ex.ToString)
	End Try
End Sub
End Class

Edited by User LoL

Share this post


Link to post
Share on other sites
User LoL

Ninguém pode ajudar? Ou então indicar outro método de criptografia segura, exceto Aes e Hash

Share this post


Link to post
Share on other sites
User LoL

é só um exemplo.Criptografando "teste", obtenho:

VQKj3bD4F0Cu2B4AKDjHjQ==

Acontece, que quando eu copio esse código, fecho o programa e abro denovo, ele não reconhece "VQKj3bD4F0Cu2B4AKDjHjQ==" como um texto criptografado

Share this post


Link to post
Share on other sites
Rui Carlos

Pega num debugger, e compara o valor das variáveis em ambas as execuções (na que dá o resultado correcto, e na que não dá).

Também podes simplesmente usar prints.

A ideia é ver onde é que as execuções começam a divergir. Tal deve-te permitir detectar o erro.

Share this post


Link to post
Share on other sites
User LoL

Pelo que tenho observado no código, ele não está apenas movendo o resultado criptografado para a memória, e recuperando de la? Essa seria a única explicação para o problema, pois depois que eu abro novamente a aplicação para descriptografar, ao inves de pegar do textbox o texto a descriptografar ele busca na memória, e como não tem nada lá pois o programa acabou de ser aberto, ele mostra essa mensagem de erro. Estou certo?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.