• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

teckV

Introduzir Arrays de Bytes no SQL Server

3 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora