2009-05-10 10 views
8

Il mio capo desidera che crittografi alcune informazioni utilizzate durante il trasferimento dei dati. Le stringhe individuali da crittografare hanno una lunghezza compresa tra otto e venti caratteri. Per cifrare e decifrare è necessario utilizzare un'unica password, quindi ho bisogno di un algoritmo simmetrico. Non voglio fare il mio - voglio usarne uno incorporato in .NET da C#.Qual è il modo migliore per crittografare le stringhe corte in .NET?

Quindi, quale algoritmo è il migliore?

+2

ROT13. È anche super efficiente! –

+0

Vedere il mio post qui: [http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in-c](http://stackoverflow.com/questions/202011/encrypt-decrypt-string-in- c) – NotDan

+0

controllare questo [tutorial di crittografia] (http://msdn.microsoft.com/en-us/library/aa302405.aspx). –

risposta

8

TripleDes?

È possibile utilizzare il System.Security.Cryptography.TripleDESCryptoServiceProvider

piccola quantità di codice per encrypy/decifrare ... fa esattamente quello che dice sulla latta :)

+0

Sono d'accordo con te DES è l'opzione migliore per lui. –

+0

La mia unica preoccupazione con DES è come fare in modo sicuro uno scambio di chiavi. –

+1

Questo problema (scambio di chiavi) si applica a qualsiasi cifra simmetrica (ovviamente ci sono anche problemi con asimmetrico), e l'OP ha richiesto esplicitamente simmetria. http: //en.wikipedia.org/wiki/Key_exchange è un buon punto di partenza, ma è un argomento complesso. –

1

Si può solo utilizzare la crittografia RSA, dal momento che questi sono brevi stringhe , che renderà più semplice lo scambio di chiavi.

Quanto è possibile crittografare con RSA si basa sulla lunghezza della chiave.

Sono un fan della libreria rsa dal castello gonfiabile.

6

TripleDES è un'opzione molto buona, ma è anche possibile considerare AesCryptoServiceProvider (AES), che è un moderno codice simmetrico.

2

classi di sicurezza .net:

Hash

* MD5 
* MD5Cng 
* SHA1 
* SHA1Managed 
* SHA1Cng 
* SHA256 
* SHA256Managed 
* SHA256Cng 
* SHA384 
* SHA384Managed 
* SHA384Cng 
* SHA512 
* SHA512Managed 
* SHA512Cng 

crittografia simmetrica: utilizza la stessa chiave per la crittografia e la decrittografia.

* DES 
* DESCryptoServiceProvider 
* TripleDES 
* TripleDESCryptoServiceProvider 
* Aes 
* AesCryptoServiceProvider 
* AesManaged 
* RC2 
* RC2CryptoServiceProvider 
* Rijandel 
* RijandelManaged 

Crittografia asimmetrica: utilizza chiavi diverse per la crittografia e la decrittografia.

* DSA 
* DSACryptoServiceProvider 
* ECDsa 
* ECDsaCng 
* ECDiffieHellman 
* ECDiffieHellmanCng 
* RSA 
* RSACryptoServideProvider 
+1

Questo è un ottimo dump di nomi di classi, ma la maggior parte di essi non ha rilevanza per il mittente (chi vuole un/simmetrico// crittografia/algoritmo), non un hash o un cifrario asimmetrico. –

3

Qui è crittografare & funzione di decifrare con la crittografia des3

''' <summary> 
''' Encrypts a memory string (i.e. variable). 
''' </summary> 
''' <param name="data">String to be encrypted.</param> 
''' <param name="key">Encryption key.</param> 
''' <param name="iv">Encryption initialization vector.</param> 
''' <returns>Encrypted string.</returns> 
Public Shared Function Encrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String 
    Dim bdata As Byte() = Encoding.ASCII.GetBytes(data) 
    Dim bkey As Byte() = HexToBytes(key) 
    Dim biv As Byte() = HexToBytes(iv) 

    Dim stream As MemoryStream = New MemoryStream 
    Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateEncryptor(bkey, biv), CryptoStreamMode.Write) 

    encStream.Write(bdata, 0, bdata.Length) 
    encStream.FlushFinalBlock() 
    encStream.Close() 

    Return BytesToHex(stream.ToArray()) 
End Function 

''' <summary> 
''' Decrypts a memory string (i.e. variable). 
''' </summary> 
''' <param name="data">String to be decrypted.</param> 
''' <param name="key">Original encryption key.</param> 
''' <param name="iv">Original initialization vector.</param> 
''' <returns>Decrypted string.</returns> 
Public Shared Function Decrypt(ByVal data As String, ByVal key As String, ByVal iv As String) As String 
    Dim bdata As Byte() = HexToBytes(data) 
    Dim bkey As Byte() = HexToBytes(key) 
    Dim biv As Byte() = HexToBytes(iv) 

    Dim stream As MemoryStream = New MemoryStream 
    Dim encStream As CryptoStream = New CryptoStream(stream, des3.CreateDecryptor(bkey, biv), CryptoStreamMode.Write) 

    encStream.Write(bdata, 0, bdata.Length) 
    encStream.FlushFinalBlock() 
    encStream.Close() 

    Return Encoding.ASCII.GetString(stream.ToArray()) 
End Function 
0

DES è praticamente obsoleto a questo punto. Ecco lo Wikipedia. Se si cambia molto la chiave, potrebbe essere adeguata, ma se si sta facendo affidamento su una chiave per un po ', AES sembra una scelta migliore.

Ovviamente si tratta di quanta protezione è necessaria. Ma anche AES è costruito proprio lì.

Ho usato AES per stringhe piccole, e funziona bene.

Quello che ho letto su TripleDES è che poiché DES è facilmente fendibile, TripleDES non è ancora sostanziale.

+2

In realtà, Wikipedia (http://en.wikipedia.org/wiki/TripleDES#Security) e NIST (http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf) (p.66), affermano che TripleDES dovrebbe essere sicuro fino al 2030. –

+0

[documento NIST originale] (http://web.archive.org/web/20090327043940/http://csrc.nist.gov/publications/ nistpubs/800-57/SP800-57-Part1.pdf) da Internet Archive. [Documento NIST rivisto] (http://csrc.nist.gov/publications/nistpubs/800-57/sp800-57-Part1-revised2_Mar08-2007.pdf) (2007) con la stessa conclusione su Triple DES. –

Problemi correlati