Tengo que encriptar/descifrar cierta información sensible en un archivo Xml? Sí, puedo hacerlo escribiendo mis propios algoritmos personalizados. Me pregunto si ya existe una forma integrada en .NET para hacer eso y también qué puntos debo tener siempre en cuenta ...¿Cómo encriptar una cadena en .NET?
13
A
Respuesta
24
Aquí hay un par de funciones que utilizan el marco .NET para cifrar y descifrar una cadena:
public string EncryptString(string plainText)
{
// Instantiate a new RijndaelManaged object to perform string symmetric encryption
RijndaelManaged rijndaelCipher = new RijndaelManaged();
// Set key and IV
rijndaelCipher.Key = Convert.FromBase64String("ABC");
rijndaelCipher.IV = Convert.FromBase64String("123");
// Instantiate a new MemoryStream object to contain the encrypted bytes
MemoryStream memoryStream = new MemoryStream();
// Instantiate a new encryptor from our RijndaelManaged object
ICryptoTransform rijndaelEncryptor = rijndaelCipher.CreateEncryptor();
// Instantiate a new CryptoStream object to process the data and write it to the
// memory stream
CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndaelEncryptor, CryptoStreamMode.Write);
// Convert the plainText string into a byte array
byte[] plainBytes = Encoding.ASCII.GetBytes(plainText);
// Encrypt the input plaintext string
cryptoStream.Write(plainBytes, 0, plainBytes.Length);
// Complete the encryption process
cryptoStream.FlushFinalBlock();
// Convert the encrypted data from a MemoryStream to a byte array
byte[] cipherBytes = memoryStream.ToArray();
// Close both the MemoryStream and the CryptoStream
memoryStream.Close();
cryptoStream.Close();
// Convert the encrypted byte array to a base64 encoded string
string cipherText = Convert.ToBase64String(cipherBytes, 0, cipherBytes.Length);
// Return the encrypted data as a string
return cipherText;
}
public string DecryptString(string cipherText)
{
// Instantiate a new RijndaelManaged object to perform string symmetric encryption
RijndaelManaged rijndaelCipher = new RijndaelManaged();
// Set key and IV
rijndaelCipher.Key = Convert.FromBase64String("ABC");
rijndaelCipher.IV = Convert.FromBase64String("123");
// Instantiate a new MemoryStream object to contain the encrypted bytes
MemoryStream memoryStream = new MemoryStream();
// Instantiate a new encryptor from our RijndaelManaged object
ICryptoTransform rijndaelDecryptor = rijndaelCipher.CreateDecryptor();
// Instantiate a new CryptoStream object to process the data and write it to the
// memory stream
CryptoStream cryptoStream = new CryptoStream(memoryStream, rijndaelDecryptor, CryptoStreamMode.Write);
// Will contain decrypted plaintext
string plainText = String.Empty;
try
{
// Convert the ciphertext string into a byte array
byte[] cipherBytes = Convert.FromBase64String(cipherText);
// Decrypt the input ciphertext string
cryptoStream.Write(cipherBytes, 0, cipherBytes.Length);
// Complete the decryption process
cryptoStream.FlushFinalBlock();
// Convert the decrypted data from a MemoryStream to a byte array
byte[] plainBytes = memoryStream.ToArray();
// Convert the encrypted byte array to a base64 encoded string
plainText = Encoding.ASCII.GetString(plainBytes, 0, plainBytes.Length);
}
finally
{
// Close both the MemoryStream and the CryptoStream
memoryStream.Close();
cryptoStream.Close();
}
// Return the encrypted data as a string
return plainText;
}
Por supuesto que no aconsejo codificando el vector de inicialización llave y como esto :)
10
Probablemente querrá sumergirse en el espacio de nombres System.Security.Cryptography
. Supongo que los artículos Cryptography Overview, Encrypting Data y Decrypting Data en MSDN podrían ser buenos iniciadores.
Cuestiones relacionadas
- 1. Encriptar y desencriptar una cadena en java
- 2. ¿Cómo puedo encriptar una cadena de consulta en asp.net?
- 3. Encriptar/Codificar una ID en la cadena de URL
- 4. Encriptar y descifrar cadena con clave PHP
- 5. Cómo formatear condicionalmente una cadena en .Net?
- 6. Encriptar cadena en C# y descifrarla en Delphi
- 7. Encriptar en SQL Server/Descifrar en .Net 4
- 8. RSA Encriptar en PHP para descifrar en .NET
- 9. ¿Cómo encriptar una columna específica en una tabla MySQL?
- 10. Encriptar servicios de aplicación ConnectionString
- 11. ¿Podemos encriptar una carpeta en android?
- 12. ¿Debo encriptar web.config en un alojamiento compartido?
- 13. ¿Cómo encriptar archivos con Ruby?
- 14. ¿Cómo encriptar un archivo .zip?
- 15. ¿Cómo encriptar la identificación de la sesión en una cookie?
- 16. Cómo convertir una cadena en base64 en .NET Framework 4
- 17. PGP Encriptar y descifrar
- 18. ¿Cómo encriptar en VBScript usando AES?
- 19. ¿Cómo uso el contenedor OpenSSL.Net C# para encriptar una cadena con AES?
- 20. ¿Es posible encriptar con clave privada usando .NET RSACryptoServiceProvider?
- 21. ¿Forma fácil de encriptar/ofuscar una matriz de bytes usando un secreto en .NET?
- 22. Usando java para encriptar enteros
- 23. Cómo escribir caracteres especiales ASCII en una cadena .Net
- 24. ¿Cómo uso una cadena como secuencia en .Net?
- 25. ¿Cómo reemplazo la * primera instancia * de una cadena en .NET?
- 26. Forma de encriptar una sola int
- 27. ¿Cuál es la mejor manera de encriptar una cadena muy corta en PHP?
- 28. Descifrar en Python una cadena encriptada usando .NET
- 29. cadena Splitter en .NET
- 30. encriptar columna en la tabla
" ABC "y" 123 "son longitudes no válidas para una matriz de caracteres Base-64. – JeffO
Se suponía que solo era una ilustración, pero punto justo;) – Cocowalla
Solo para agregar valor para los demás visitantes aquí: la longitud de ambas teclas y IV puede ser de 24 caracteres. Por ejemplo: "keJhDo9YvJsp01j4JUdVuE ==" –