Ayuda funcion encriptar desencriptar AES Leido 18.092 veces

 
  Broco
Pregunta ofrece:
5 estrellas

 Bueno, estoy intentando encriptar y desencriptar un String, el encriptador funciona



Public Shared Function EnriptarAES(ByVal TextoParaEncriptar$) As String

  Dim utf As Text.Encoding = New Text.UTF8Encoding()

Dim aes As Security.Cryptography.Rijndael = New Security.Cryptography.RijndaelManaged()

  Dim RijndaelAlg As Rijndael = Rijndael.Create
  Dim encrypt As Security.Cryptography.ICryptoTransform = aes.CreateEncryptor(RijndaelAlg.Key, RijndaelAlg.IV)

  Dim cipher As Byte() = encrypt.TransformFinalBlock(utf.GetBytes(TextoParaEncriptar), 0, utf.GetByteCount(TextoParaEncriptar))
  Dim textoEncripado$
  For i As Integer = 0 To cipher.Length - 1
   textoEncripado &= cipher(i)
  Next
  Return textoEncripado
End Function

Public Shared Function DesEncriptarAES(ByVal Textoencriptado As String) As String
  Dim utf As Text.Encoding = New Text.UTF8Encoding()
  Dim aes As Security.Cryptography.Rijndael = New Security.Cryptography.RijndaelManaged()

  Dim RijndaelAlg As Rijndael = Rijndael.Create
  Dim encrypt As Security.Cryptography.ICryptoTransform = aes.CreateDecryptor(RijndaelAlg.Key, RijndaelAlg.IV)

'************************ Aqui da el error "Length of the data to decrypt is invalid"
  Dim cipher As Byte() = encrypt.TransformFinalBlock(utf.GetBytes(Textoencriptado), 0, utf.GetByteCount(Textoencriptado))
  Dim TextoDesencriptado$
  For i As Integer = 0 To cipher.Length - 1
   TextoDesencriptado&= cipher(i)
  Next
  Return TextoDesencriptado
End Function


T_T encriptar se encripta bien, fala al desencriptar....

 

 





  Broco
Bueno, estoy usando esto de y de momento funciona bien

 

 


  Broco
Bueno, ya la he presonalizado a mi gusto, por si alguien quiere la funcion que estoy usando...




Public Class FuncionCompletada
Public Descripcion$
Public Completada As Boolean
Public Retornar
End Class

Private Shared Function getAlgorithm(ByVal password As String) As SymmetricAlgorithm
Dim algorithm As SymmetricAlgorithm = Rijndael.Create()
Dim rdb As New Rfc2898DeriveBytes(password, New Byte() {3, 3, 3, 3, 3, 3, 3, 4})
algorithm.Padding = PaddingMode.ISO10126
algorithm.Key = rdb.GetBytes(32)
algorithm.IV = rdb.GetBytes(16)
Return algorithm
End Function

Public Shared Function Aes(ByVal Texto As String, ByVal Contraseña As String, ByVal Encriptar As Boolean) As FuncionCompletada
Dim Retornar As New FuncionCompletada

If Encriptar Then ' ******************* ENCRIPTAR
Try
Dim algorithm As SymmetricAlgorithm = getAlgorithm(Contraseña)
Dim clearBytes As Byte() = System.Text.Encoding.Unicode.GetBytes(Texto)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, algorithm.CreateEncryptor(), CryptoStreamMode.Write)
cs.Write(clearBytes, 0, clearBytes.Length)
cs.Close()
Retornar.Descripcion = "Encriptado correcto."
Retornar.Completada = True
Retornar.Retornar = Convert.ToBase64String(ms.ToArray())
Catch
Retornar.Descripcion = "No se ha podido encriptar."
Retornar.Completada = False
Retornar.Retornar = Texto

End Try

Else ' ******************* DESENCRIPTAR

Try
Dim algorithm As SymmetricAlgorithm = getAlgorithm(Contraseña)
Dim cipherBytes As Byte() = Convert.FromBase64String(Texto)
Dim ms As New MemoryStream()
Dim cs As New CryptoStream(ms, algorithm.CreateDecryptor(), CryptoStreamMode.Write)
cs.Write(cipherBytes, 0, cipherBytes.Length)
cs.Close()
Retornar.Descripcion = "Desencriptado correcto."
Retornar.Completada = True
Retornar.Retornar = System.Text.Encoding.Unicode.GetString(ms.ToArray())
Catch

Retornar.Descripcion = "No se ha podido desencriptar."
Retornar.Completada = False
Retornar.Retornar = Texto

End Try

End If

Return Retornar
End Function



Ejemplo de como usarlo: (Si en el byval Encriptar pones True se encripta si pones False se desencripta :) )




Dim encriptado$ = Aes("Hola Wikun!", "wikun", True).Retornar
MsgBox(encriptado) 'Ves el texto encriptado
MsgBox(Aes(encriptado, "wikun", False).Retornar) 'Ves el texto des encriptadp


 

 


  Kni
Yo uso un encriptador DES (que creo que se puede convertir a AES) extraído de Microsoft. Si quieres el link ahí va http://support.microsoft.com/kb/301070 .
 

 


  Alex
Yo también uso AES me parece un poquillo mas fácil (para mi)
 

 








    ¿Cuantas columnas?     | 2 columnas | 3 columnas | 4 columnas | 5 columnas | 6 columnas |  
    Escribe la dirección web de la imagen:
  Publica tu respuesta  |  Haz Click en el siguiente cuadro para escribir