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

pmaster

Codificação

Recommended Posts

pmaster

Boa tarde.

Em relação a criptografia:

Eu em vb insiro uma password e ela fica emcriptada tudo bem e em php tambem.

Mas eu em PHP uso a propriedade md5 para fazer tambem a codificação mas as codificações ficam diferentes com mesma palavra a ser encriptada.

A minha ideia era gravar no vb e conseguir descriptar em php e vice versa.

Se alguém me pudesse ajudar agradecia. 

Share this post


Link to post
Share on other sites
anolsi

O md5 não te permite voltar do hash para a palavra. (Pelo menos de uma forma 'natural').

Mas a codificação deve ser igual em ambos os locais pois é um algoritmo standard. (Mas eu só o usei em PHP, nunca em VB)


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
pmaster

É assim..

Eu de vb encripta e descripta.

Em php encripta e descripta.

Com a mesma palavra na mesma base de dados.

Mas codificando em vb nao descodifica em php e vice versa, o que eu queria era isso que descodificasse independentemente de qual eu usá-se para descodificar..

Share this post


Link to post
Share on other sites
pmg

Então usa o mesmo método de codificação em vb e em php.

Qual é o método que usas em vb?

Qual é o método que usas em php? (Não, não é md5!)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmaster

$password = md5($_post['pass']); assim encripto em php uma pass word

e em vb Crypto.Encrypt(Me.TextBox2.Text)

para usar tenho de ter as seguintes funções:

''' <summary>
''' Encriptação simples usando TripleDES
''' (Triple Data Encryption Standard)
''' </summary>
''' <remarks></remarks>
Partial Class Crypto

    Private Shared TripleDES1 As New TripleDESCryptoServiceProvider
    Private Shared MD51 As New MD5CryptoServiceProvider

    ' Definição da chave de encriptação/decriptação
    Private Const key1 As String = "CHAVE12345teste"

    ''' <summary>
    ''' Calcula o MD5 Hash 
    ''' </summary>
    ''' <param name="value">Chave</param>
    Public Shared Function MD5Hash(ByVal value As String) As Byte()
        ' Converte a chave para um array de bytes 
        Dim byteArray() As Byte = ASCIIEncoding.ASCII.GetBytes(value)
        Return MD5.ComputeHash(byteArray)
    End Function


    ''' <summary>
    ''' Encripta uma string com base em uma chave
    ''' </summary>
    ''' <param name="stringToEncrypt">String a encriptar</param>
    Public Shared Function Encrypt(ByVal stringToEncrypt As String) As String

        Try

            ' Definição da chave e da cifra (que neste caso é Electronic
            ' Codebook, ou seja, encriptação individual para cada bloco)
            TripleDES.Key = Crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB

            ' Converte a string para bytes e encripta
            Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
            Return Convert.ToBase64String(TripleDES.CreateEncryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
        End Try

    End Function


    ''' <summary>
    ''' Decripta uma string com base em uma chave
    ''' </summary>
    ''' <param name="encryptedString">String a decriptar</param>
    Public Shared Function Decrypt(ByVal encryptedString As String) As String

        Try

            ' Definição da chave e da cifra
            TripleDES.Key = Crypto.MD5Hash(key)
            TripleDES.Mode = CipherMode.ECB

            ' Converte a string encriptada para bytes e decripta
            Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
            Return ASCIIEncoding.ASCII.GetString(TripleDES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))

        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
            Return String.Empty
        End Try

    End Function

em php ele codifica de uma maneira e em vb outra.

Share this post


Link to post
Share on other sites
jpaulino

Eu percebo muito pouco de php mas repara que estás só a calcular o Md5 em php e a encriptar em vb (que também utiliza o md5 hash code).

Não deve ser a mesma coisa!

Share this post


Link to post
Share on other sites
pmg
Em php encripta e descripta.
Qual é o método que usas em php? (Não, não é md5!)
$password = md5($_post['pass']); assim encripto em php uma pass word

Então descodifica lá isto:

$ php -r 'echo md5($_ENV["PWD"]), "\n"';
6336863e36cee0548b14aa8614966bad
$

Qual era a minha 'working directory' (o conteúdo de $_ENV["PWD"]) quando escrevi aquele comando?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Se calhar é possível fazer em PHP o mesmo que a tua função faz em VB.

Nunca usei o Mcrypt, mas aparentemente, ele faz isso.

http://www.php.net/manual/en/book.mcrypt.php


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmaster

pmg tinhas razão, volta do hash para a palavra.

Pensei que iria conseguir fazer desta mas estava errado.

Se alguém me poder ajudar ou dar uma ideia eu agradecia.

Obrigado.

Share this post


Link to post
Share on other sites
pmg

O que é que queres fazer exactamente?

Queres passar passwords (encriptadas) entre o VB e o PHP, para quê?

Queres encriptar uma password em VB e desencriptá-la em PHP (e vice-versa), para quê?

Qual é o nível de segurança criptográfica que pretendes? Se calhar um simples "ROT13" ou um XOR com uma constante serve-te.

Como já indiquei na outra mensagem, em PHP tens o módulo Mcrypt que (se calhar (nunca o usei)) faz o que tu pretendes.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
José Lopes

bom...aquilo que eu costumo fazer é passar a pwd simples... e compara-la do outro lado, depois de encriptada com a pwd encriptada salva algures....

Quanto a desincriptação..parece-me que e mm quase impossivel... a nao ser para os geeks do hack!!


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
pmaster

bem a ideia é assim..

Em vb eu crio um utilizadore em vb que tem uma password que está codificada. (estou aberto a sugestoes de como codificar.)

e quero que num site que vai estar ligado á mesma base de dados, os utilizadores que estiverem escritos no programa possam fazer o login nesse site.

Se alguém me poder dar uma luz agradecia :D

Share this post


Link to post
Share on other sites
José Lopes

então...nada mais simples....

Tu tens que criar o utilizador em VB... certo.... quando escolhes a password para o utilizador, e antes de gravar na BD.... passas a palavra por MD5... se quiseres tenho codigo para isso...e é o HASH da pwd que vai entrar na tabela, nunca a pwd original.

Depois no site... a unica coisa que tens que fazer é uma consulta à BD... se a pwd, que o utilizador inseriru normalmente, por ex: "ola mundo", passada pela função do MD5 do php for igual à que está na BD... Login com sucesso...caso contrário... Login Errado.

Ou estou a perceber mal os teus objectivos, ou então, não percebo a dificuldade.

Fica aqui a Função que uso em vb.net para a transformação

Imports System.Security.Cryptography
'Primeiro o Import
.....

    Public Function GetMd5(ByVal strPass As String) As String
        Dim md5 As MD5 = MD5CryptoServiceProvider.Create()
        Dim dataMd5() As Byte = md5.ComputeHash(Encoding.Default.GetBytes(strPass))
        Dim sb As StringBuilder = New StringBuilder()
        Dim i As Integer
        For i = 0 To dataMd5.Length - 1 Step i + 1
            sb.AppendFormat("{0:x2}", dataMd5(i))
        Next
        Return sb.ToString()
    End Function

Posso dizer-te que  a função de criar o HASH deve ser similar, pk eu uso uma função imbutida do oracle.... e o que é certo é que as coisas batem certinho quando vou comparar!

Mas depois acho que ainda podes complicar mais nomeademente se encriptas a 64 bits, ou a 128... ja li qq coisa sobre isso... mas isto pra mim...chega-me perfeitamente


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
pmaster

Já agora alguem podia me dizer se faz favor como é que eu passo o texto de uma textbox para md5?

Obrigado :D

Share this post


Link to post
Share on other sites
jpaulino

É exatamente isto que eu precisava José Lopes !!

Nem mais nem menos!

Mas atenção, isto não é encriptação!

Já agora alguem podia me dizer se faz favor como é que eu passo o texto de uma textbox para md5?

Obrigado :D

Em vb ou php ?

Share this post


Link to post
Share on other sites
José Lopes

o que eu queria dizer jpaulino, e até posso estar errado.. é que isto é so criar em md5... mas também existem sistemas que são baseados em funções de encriptação, e que esses sistemas podem trabalhar em 64 ou 128 bit's.

Estarei errado?


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
José Lopes

Já agora alguem podia me dizer se faz favor como é que eu passo o texto de uma textbox para md5?

Obrigado :D

por exemplo

Dim strAux as string
strAux  = GetMd5(txt1.text)

..e pronto...passaste o valor da text box,para uma variável, já em md5...

A propósito de Md5...

http://pt.wikipedia.org/wiki/MD5

Cumps


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

isto é so criar em md5

Se veres o exemplo que o pmaster mostro e que retirou do meu blog, é feita uma conversão para MD5 antes de fazer a encriptação para TripleDES (como para qualquer outro como AES, Rijndael, etc).

É um passo indispensável mas não é uma encriptação porque não tem uma cifra (chave)

Share this post


Link to post
Share on other sites
José Lopes

ok...

o que eu queria dizer é que os objectivos são diferentes... o objectivo da encriptação, será digamos assim a  grosso modo, transmitir a informação de uma forma mais segura, havendo um "chave mestra", que permite de um lado a encriptação, e do outro a "desincriptação", ao passo que o MD5, apenas cria 8um hash e é unidireccional...

mas para o objectivo que ele queria, seria necessário encriptar?


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

mas para o objectivo que ele queria, seria necessário encriptar?

Penso que não ... mas a encriptação é mais segura, embora na maioria dos casos uma pequeno algoritmo XOR resolve o problema.

A encriptação é realmente importante em projectos grandes onde existe a possibilidade de várias pessoas tentarem quebrar a segurança ou conseguirem ganhar algo com isso. Não é numa aplicação "caseira" que um hacker vai perder tempo a tentar entrar/quebrar a segurança.

No entanto, e com a simplicidade dos namespaces disponíveis no .Net Framework, não custa nada implementar em todos os projectos.

É o que eu penso :D

Share this post


Link to post
Share on other sites
José Lopes

No entanto, e com a simplicidade dos namespaces disponíveis no .Net Framework, não custa nada implementar em todos os projectos.

É o que eu penso :D

Agora fiquei completamente  a leste.... mas imaginando uma aplicação winforms.... estamos a falar apenas da autenticação... ou que?

Confesso que é um tema completamente novo para mim...por isso...

lol...se houver por ai alguma literatura sintetizada...agradeço!

obrigado


Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!

Share this post


Link to post
Share on other sites
jpaulino

Agora fiquei completamente  a leste.... mas imaginando uma aplicação winforms.... estamos a falar apenas da autenticação... ou que?

Eu não estou a falar de autenticação mas sim de encriptacção (que normalmente é usada na autenticação).

Se queres um exemplo de encriptação podes ver no meu blog: TripleDES

Share this post


Link to post
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

×

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.