Jump to content

Introduzir Arrays de Bytes no SQL Server


teckV
 Share

Recommended Posts

Boas,

estou a tabalhar num algoritmo para encriptar dados em MS SQL server usando a cifra TripleDES com recurso a vector de inicialização...

para tal criei uma classe com o nome "myObjTripleDES" onde encapsulo os "internals" do algoritmo TripleDES... esta classe tem os metodos "encrypt" para encriptar um texto e o "Decrypt" para desencriptar...

o TripleDES é simetrico pelo que precisa de um chave e um vector de iniciação... estão dentro da classe em arrays de bytes...

temos um textbox onde introduzimos o texto e outro que o apresenta depois de cifrado e descifrado...

codigo para usar esta classe (se alguem quiser esta classe vou postala na zona de VB.NET)

Dim crypt As New myObjTripleDES
Dim textByte() As Byte

textByte = crypt.Encrypt(txtInicio.Text)

txtFim.Text = crypt.Decrypt(textByte)

portantos o Array de Bytes "textByte" contem um array de bytes com o texto cifrado (torna muito mais dificil o seu manuseamento indevido, que é o pretendido...

txtInicio.Text contem o texto que queremos cifrar

textByte = crypt.Encrypt(txtInicio.Text)

mas agora se quisermo introduzir isto numa BD levantam-se problemas pelo que acho iteressante partilhar esta info...

quero fazer o update a um registo com um campo varbinary(100) mas não podemos usar os metodos standard de criar a query on the fly recorrendo a strings, pois temos um Array Multidimensional com os bytes do nosso texto...

vou apresentar aqui uma forma de o fazer que é criando SQLParameters e passar o Array de Bytes através de um SqlParameter

criar o parametro:

Dim paramTextByte As New SqlParameter("@slimC", textByte)

o commandText

            cmdInsertText = "UPDATE ad_appSets SET slim = @slimC " & _
                "WHERE     (nomeCampo = 'adROOTpath')"

onde "slim" é o nome do campo do tipo varbinary e "@slimC " o parametro mysql que vai ser usado para passar o array de bytes para a BD

assim

            MyCommand.CommandText = cmdInsertText
            MyCommand.Parameters.Add(paramTextByte)

            Call MyCommand.ExecuteNonQuery()

o codigo completo:

Private Sub btnSetPass_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetPass.Click

        Try

            Dim cmdInsertText As String
            Dim myAppUtils As New appUtils

            Dim objCryp As New myObjTripleDES
            Dim textByte() As Byte

            textByte = objCryp.Encrypt(txtText.Text)

            Dim conStr = myAppUtils.confConString
            Dim MyCon = New SqlConnection(conStr)
            MyCon.Open()

            Dim MyCommand As SqlCommand = New SqlCommand
            MyCommand.Connection = MyCon

            Dim paramTextByte As New SqlParameter("@slimC", textByte)

            cmdInsertText = "UPDATE ad_appSets SET slim = @slimC " & _
                "WHERE     (nomeCampo = 'adROOTpath')"

            MyCommand.CommandText = cmdInsertText
            MyCommand.Parameters.Add(paramTextByte)

            Call MyCommand.ExecuteNonQuery()


            myAppUtils = Nothing
            'Fecha a ligação à BD
            MyCommand = Nothing
            MyCon.close()

        Catch ex As Exception
            deb.WriteLine("erro = " & ex.Message)
            lblMSG.Text = "Ocorreu um erro na introdução dos dados!!  Verifique os dados a introduzir"
        End Try

    End Sub

fiquem

teckV

Link to comment
Share on other sites

Completo com duas técnicas alternativas, que permitem a utilização de SQL standard quando não se tem acesso a JET/ADO/etc..

Sabendo o tamanho das dimensões do array, e visto que neste caso é um array multidimensional, é possível guardar cada uma das dimensões, e o seu índice, num registo. Desta forma é possível reconstruir o array sem problemas recorrendo ao índice

Outra forma é guardar tudo num único registo numa única cadeia de bytes, sendo obviamente necessário saber o tamanho para a reconstrução do array multidimensional.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

O Sql Server 2005 já suporta encriptacao.

Jorge

"The Dark Side Clouds Everthing. Impossible To See The Future Is."My rig: Intel Core 2 Quad Q9450 | abit IP35P | 4G Kingston 800 Mhz | XFX GeForce 9800 GX2 1G ddr3 | 2X WD5000AAJS 500Gb Sata 2 | PSU 600W || Caixa El-Diablo | Creative XMod

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.