2008-09-29 18 views
5

que tienen esta función en "ENCRYPT" VB.net (ver más abajo)¿Cómo guardar una cadena cifrada en la base de datos?

Private key() As Byte = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24} 
Private iv() As Byte = {65, 110, 68, 26, 69, 178, 200, 219} 

Public Function Encrypt(ByVal plainText As String) As Byte() 
    ' Declare a UTF8Encoding object so we may use the GetByte 
    ' method to transform the plainText into a Byte array. 
    Dim utf8encoder As UTF8Encoding = New UTF8Encoding() 
    Dim inputInBytes() As Byte = utf8encoder.GetBytes(plainText) 

    ' Create a new TripleDES service provider 
    Dim tdesProvider As TripleDESCryptoServiceProvider = New TripleDESCryptoServiceProvider() 

    ' The ICryptTransform interface uses the TripleDES 
    ' crypt provider along with encryption key and init vector 
    ' information 
    Dim cryptoTransform As ICryptoTransform = tdesProvider.CreateEncryptor(Me.key, Me.iv) 

    ' All cryptographic functions need a stream to output the 
    ' encrypted information. Here we declare a memory stream 
    ' for this purpose. 
    Dim encryptedStream As MemoryStream = New MemoryStream() 
    Dim cryptStream As CryptoStream = New CryptoStream(encryptedStream, cryptoTransform, CryptoStreamMode.Write) 

    ' Write the encrypted information to the stream. Flush the information 
    ' when done to ensure everything is out of the buffer. 
    cryptStream.Write(inputInBytes, 0, inputInBytes.Length) 
    cryptStream.FlushFinalBlock() 
    encryptedStream.Position = 0 

    ' Read the stream back into a Byte array and return it to the calling method. 
    Dim result(encryptedStream.Length - 1) As Byte 
    encryptedStream.Read(result, 0, encryptedStream.Length) 
    cryptStream.Close() 
    Return result 
End Function 

Quiero salvar la cadena cifrada en la base de datos SQL. ¿Cómo lo hago?

+1

no sé por qué esto quedó downvoted, se parece a una pregunta válida para mí –

Respuesta

0

Codifica la matriz de bytes en una cadena. 0x00 puede ser "00" y 0xFF puede ser "FF". O puede mirar en Base64.

+0

¿cómo codificar los array de byte en una cadena? – sef

+0

Siempre que pueda tener una correspondencia uno a uno entre la matriz de bytes a una cadena, se trata de una codificación. Para convertir un solo byte en dos letras de cadena hexadecimal como "FF", puede llamar a Byte.ToString (String) con "X2" como parámetro: http://msdn.microsoft.com/en-us/library/y11056e9 (VS.80) .aspx –

0

Una cadena de caracteres encriptada no debe ser diferente de cualquier dato binario.

Si sabe que los resultados van a ser pequeños, podría usarlos y guardarlos en un campo de texto.

3

Simplemente almacene en una columna binaria. (En su mayoría hechas de la memoria, las correcciones son bienvenidos!)

CREATE TABLE [Test] 
(
    [Id] NOT NULL IDENTITY(1,1) PRIMARY KEY, 
    [Username] NOT NULL VARCHAR(500), 
    [Password] NOT NULL VARBINARY(500) 
) 

Luego inserte tales:

Dim conn As SqlConnection 

Try 
    conn = New SqlConnection("<connectionstring>") 
    Dim command As New SqlCommand("INSERT INTO [Test] ([Username], [Password]) VALUES (@Username, @Password)", conn) 

    Dim usernameParameter = New SqlParameter("@Username", SqlDbType.VarChar) 
    usernameParameter.Value = username 
    command.Parameters.Add(usernameParameter) 

    Dim passwordParameter = New SqlParameter("@Password", SqlDbType.VarBinary) 
    passwordParameter.Value = password 
    command.Parameters.Add(passwordParameter) 

    command.ExecuteNonQuery() 

Finally 
    If (Not (conn Is Nothing)) Then 
     conn.Close() 
    End If 
End Try 
Cuestiones relacionadas