Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.06 KB | None | 0 0
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. using System.IO;
  5.  
  6. namespace Articulos.Pregunta.P1120
  7. {
  8. public class DESEncrypt
  9. {
  10. // Crea la llave y el vector de inicialización para la
  11. // contraseña de protección del contenido a
  12. // encriptar o desencriptar usando un algoritmo basado
  13. // en TripleDES:
  14. public static TripleDES CrearDES(string clave)
  15. {
  16. MD5 md5 = new MD5CryptoServiceProvider();
  17. TripleDES des = new TripleDESCryptoServiceProvider();
  18. des.Key = md5.ComputeHash(Encoding.Unicode.GetBytes(clave));
  19. des.IV = new byte[des.BlockSize / 8];
  20. return des;
  21. }
  22.  
  23. // Encripta una cadena de caracteres usando una contraseña personalizada:
  24. public string EncriptarCadenaDeCaracteres(string textoPlano, string contrasegnia)
  25. {
  26. // Primero debemos convertir el texto plano en `textoPlano`
  27. // en un arreglo de bytes:
  28. byte[] textoPlanoBytes = Encoding.Unicode.GetBytes (textoPlano);
  29.  
  30. // Uso de un flujo de memoria para la contención de los bytes:
  31. MemoryStream flujoMemoria = new MemoryStream();
  32.  
  33. // Creación de la clave de protección y el vector de inicialización:
  34. TripleDES des = CrearDES (contrasegnia);
  35.  
  36. // Creación del codificador para la escritura al flujo de memoria:
  37. CryptoStream flujoEncriptacion = new CryptoStream (flujoMemoria, des.CreateEncryptor(), CryptoStreamMode.Write);
  38.  
  39. // Escritura del arreglo de bytes sobre el flujo de memoria:
  40. flujoEncriptacion.Write (textoPlanoBytes, 0, textoPlanoBytes.Length);
  41. flujoEncriptacion.FlushFinalBlock();
  42.  
  43. // Retorna representación legible de la cadena encriptada:
  44. return Convert.ToBase64String (flujoMemoria.ToArray());
  45. }
  46.  
  47. // Descripta una cadena encriptada usando una contraseña de protección:
  48. public string DesencriptarCadenaDeCaracteres(string textoEncriptado, string contrasegnia)
  49. {
  50. // Primero debemos convertir el texto plano en `textoPlano`
  51. // en un arreglo de bytes:
  52. byte[] bytesEncriptados = Convert.FromBase64String (textoEncriptado);
  53.  
  54. // Uso de un flujo de memoria para la contención de los bytes:
  55. MemoryStream flujoMemoria = new MemoryStream();
  56.  
  57. // Creación de la clave de protección y el vector de inicialización:
  58. TripleDES des = CrearDES (contrasegnia);
  59.  
  60. // Creación de decodificador:
  61. CryptoStream flujoDesencriptacion = new CryptoStream (flujoMemoria, des.CreateDecryptor(), CryptoStreamMode.Write);
  62.  
  63. // Escritura del arreglo de bytes sobre el flujo de memoria:
  64. flujoDesencriptacion.Write (bytesEncriptados, 0, bytesEncriptados.Length);
  65. flujoDesencriptacion.FlushFinalBlock();
  66.  
  67. // Conversión del flujo de datos en una cadena de caracteres:
  68. return Encoding.Unicode.GetString (flujoMemoria.ToArray());
  69. }
  70. }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement