'////////////////////////////////////////////////////////// '// CRIPTOGRAFIA - Técnicas de desarrollo para profesionales '////////////////////////////////////////////////////////// '// Capítulo 4: Criptografía en entornos .NET '// Sección 4.4: Codificación de encriptación asimétrica '////////////////////////////////////////////////////////// '// Listado 4.5: Encriptación y desencriptación de una '// cadena de caracteres mediante el algoritmo RSA. '// Versión VB.NET. '////////////////////////////////////////////////////////// Imports System Imports System.Security.Cryptography Imports System.Text Class EjemploRSA Shared Sub Main() Try ' Crear instancia de UnicodeEncoding para convertir cadena Dim ByteConverter As New UnicodeEncoding() ' Crear array de bytes para contener la cadena orignal, y los ' resultados de la encriptación y desencriptación Dim dataToEncrypt As Byte() = ByteConverter.GetBytes("Contenido de prueba") Dim encryptedData() As Byte Dim decryptedData() As Byte ' Crear una nueva instancia de RSACryptoServiceProvider para ' generar las llaves pública y privada Dim RSA As New RSACryptoServiceProvider() ' Pasaje de datos a encriptar, la información de la llave ' pública -RSACryptoServiceProvider.ExportParameters(false)- ' y un booleano que especificará que no habrá padding OAEP encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(False), False) ' Pasaje de datos a desencriptar, la información de la llave ' privada -RSACryptoServiceProvider.ExportParameters(true)- ' y un booleano que especificará que no habrá padding OAEP decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(True), False) ' Mostrar el texto desencriptado por consola Console.WriteLine("Texto-plano desencriptado: {0}", ByteConverter.GetString(decryptedData)) Catch e As ArgumentNullException ' Tomar la excepción en el caso de que ocurriese un ' problema en la encriptación Console.WriteLine("El proceso de encriptación falló.") End Try End Sub Public Shared Function RSAEncrypt(ByVal DataToEncrypt() As Byte, ByVal RSAKeyInfo As RSAParameters, ByVal DoOAEPPadding As Boolean) As Byte() Try ' Crear una nueva instancia de RSACryptoServiceProvider Dim RSA As New RSACryptoServiceProvider() ' Importar la información de la llave RSA. Aquí sólo necesitaremos ' la información de la llave pública. RSA.ImportParameters(RSAKeyInfo) ' Encriptar el array de bytes parámetro, y especificar ' el padding OAEP (Windows XP o posterior). Return RSA.Encrypt(DataToEncrypt, DoOAEPPadding) ' Capturar y mostrar por consola la excepción CryptographicException Catch e As CryptographicException Console.WriteLine(e.Message) Return Nothing End Try End Function Public Shared Function RSADecrypt(ByVal DataToDecrypt() As Byte, ByVal RSAKeyInfo As RSAParameters, ByVal DoOAEPPadding As Boolean) As Byte() Try ' Crear una nueva instancia de RSACryptoServiceProvider Dim RSA As New RSACryptoServiceProvider() ' Importar la iformación de la llave RSA. Aquí necesitaremos ' incluir la información de la llave privada. RSA.ImportParameters(RSAKeyInfo) ' Desencriptar el array de bytes parámetro, y especificar ' el padding OAEP (Windows XP o posterior). Return RSA.Decrypt(DataToDecrypt, DoOAEPPadding) ' Capturar y mostrar por consola la excepción CryptographicException Catch e As CryptographicException Console.WriteLine(e.ToString()) Return Nothing End Try End Function End Class