Cifrado en C # -- # campo con cryptography camp codereview Relacionados El problema

Encryption in C#


2
vote

problema

Español

Me tengo a mí mismo estas dos funciones (cifrado y descifrado):

  add_student7  

Esta criptografía funciona, pero me gustaría saber si lo escribí bien y si hay alguna sugerencia para mejorar. Además, también me gustaría preguntar si puedo hacer una función en Python que puede descifrar cuál es la función C # cifrada (y en la dirección opuesta también) y ¿cómo puedo hacer eso?

Editar: Estas dos funciones están destinadas a cifrar o descifrar los mensajes a / desde un zócalo conectado a un servidor. Es por eso que recibo esto como matriz de bytes en la función de descifrado y devuélvalo como una en la función de cifrado. El servidor está escrito en Python (me dijeron que el Python puede ser fácil escribir servidores, especialmente porque el servidor es simple). Y, también quiero descifrar los mensajes enviados desde el cliente en el servidor también.

Original en ingles

I have got to my self these two functions (Encryption and Decryption):

public static byte[] Encrypt(string plaintext, byte[] key) {     using (Rijndael desObj = Rijndael.Create())     {         desObj.Key = key;         desObj.Mode = CipherMode.CFB;         desObj.Padding = PaddingMode.PKCS7;         using (MemoryStream ms = new MemoryStream())         {             ms.Write(desObj.IV, 0, desObj.IV.Length);             using (CryptoStream cs = new CryptoStream(ms, desObj.CreateEncryptor(), CryptoStreamMode.Write))             {                 byte[] plainTextBytes = Encoding.UTF8.GetBytes(plaintext);                 cs.Write(plainTextBytes, 0, plainTextBytes.Length);             }             return ms.ToArray();         }     } } public static string Decrypt(byte[] cyphertext, byte[] key) {      using (MemoryStream ms = new MemoryStream(cyphertext))     using (var desObj = Rijndael.Create())     {         desObj.Key = key;         desObj.Mode = CipherMode.CFB;         desObj.Padding = PaddingMode.PKCS7;          //Read the IV from the front of the stream and assign it to our object.         var iv = new byte[16];         var offset = 0;         while (offset < iv.Length)         {             offset += ms.Read(iv, offset, iv.Length - offset);         }         desObj.IV = iv;          //Read the bytes to be decrypted         using (var cs = new CryptoStream(ms, desObj.CreateDecryptor(), CryptoStreamMode.Read))         using (var sr = new StreamReader(cs, Encoding.UTF8))         {             return sr.ReadToEnd();         }     } } 

This cryptography works but I would like to know whether I wrote it good and if there are any suggestion to improve. In addition, I would also like to ask if I can make a function in Python that can decrypt what these C# function encrypted (and in the opposite direction too) and how can I do that?

EDIT: These two functions are meant to encrypt or decrypt the messages to/from a socket that is connected to a server. That's why I get this as byte array in the decrypt function and return it as one in the encrypt function. The server is written in Python (I was told the python can be easy to write servers with, especially because the server is a simple one). And, I want to decrypt the messages sent from the client in the server too.

     
       
       

Lista de respuestas

1
 
vote

La documentación de Microsoft en el Rijndael Class dice:

Debe usar la clase Aes en su lugar.

Para usar el cifrado en idiomas de programación, debe asegurarse de que todos los parámetros del algoritmo de cifrado sean exactamente iguales. Para AES, esto incluye el modo cifrado y todos sus parámetros (que para CFB no se documentan con precisión en la documentación de MSDN). Para garantizar la portabilidad, es necesario encontrar la documentación que especifique todos los detalles, o debe escribir pruebas de unidad para asegurarse de que los parámetros no cambien, o debe cambiar a un modo de cifrado más simple (pero no del BCE, de curso).

El código se ve bien para mí. Habría esperado que fuera más corto, aunque no sé si esto es culpa de Microsoft (porque diseñaron la API así) o la suya (porque usas la API de una manera más complicada de lo previsto).

 

The Microsoft documentation on the Rijndael class says:

You should use the Aes class instead.

In order to use encryption across programming languages, you have to make sure that all parameters of the encryption algorithm are exactly the same. For AES, this include the cipher mode and all its parameters (which for CFB are not precisely documented in the MSDN documentation). To ensure portability, you either need to find the documentation that specifies all the details, or you need to write unit tests to ensure that the parameters don't change, or you need to switch to a simpler cipher mode (but not ECB, of course).

The code looks fine to me. I would have expected it to be shorter, though I don't know whether this is Microsoft's fault (because they designed the API like this) or yours (because you use the API in a more complicated way than intended).

 
 
   
   

Relacionados problema

4  C # interfaz de criptografía  ( C cryptography interface ) 
C # carece de una interfaz común de encriptación y descifrado de estantes para la inyección de dependencia. Casi todas las bases de código que he abierto tien...

10  Clase de cifrado AES-128  ( Aes 128 encryption class ) 
Esta es la primera vez que escribí una clase en Java para hacer cifrado utilizando AES. Dado que la seguridad está involucrada, me encantaría si alguien pudie...

3  Implementación de WMSAUTH  ( Wmsauth implementation ) 
Tengo que implementar WMSAUTH en C #: http://wmsauth.org/examples // The following function was copied from http://wmsauth.org/examples public static str...

2  Implementación T-SQL TOTP (RFC6238 SHA2_256)  ( T sql totp rfc6238 sha2 256 implementation ) 
Usando mi Función anterior Como base que he subido lo siguiente: create function dbo.Totp ( @key varbinary(8000) , @timeStep int = 90 ) returns tab...

4  Herramienta de cifrado de archivos en terminal  ( Files encryption tool in terminal ) 
He creado una envoltura para el Simplecrypt biblioteca que permite cifrar / descifrar fácilmente una cadena. La aplicación se utiliza esto: //To encryp...

5  PYCRYPTO AES-256 CTR WRPPER SEGURO PARA USO PÚBLICO?  ( Pycrypto aes 256 ctr wrapper secure for public use ) 
He intentado escribir un envoltorio AES CTR más fácil de usar con Pycrypto, pero no estoy seguro de si está lo suficientemente seguro. Quiero decir, de forma ...

7  HMAC con SHA256 / 512 en óxido  ( Hmac with sha256 512 in rust ) 
He intentado lo mejor que puedo, para implementar HMAC como se especifica en la RFC 2104 < / a>. Este es también mi primer proyecto de óxido, por lo que las ...

51  Cifrado seguro simplificado de una cadena  ( Simplified secure encryption of a string ) 
Tengo dos ejemplos de código que escribí para las mejores prácticas cifrando una cadena que busco comentarios tanto en términos de mejores prácticas y segurid...

6  Java AES cbc cifrado / descifrado  ( Java aes cbc encryption decryption ) 
He examinado varios ejemplos de cifrado de modo de Java AES CBC, pero no pude encontrar una solución adecuada para usar. Terminé escribiendo mi propia clase d...

6  Formando combinaciones de palabras del archivo  ( Forming word combinations from file ) 
Estoy buscando ideas para optimizar el siguiente código para la velocidad. También estoy buscando una buena mejora en el tiempo de ejecución. Este código le...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos