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

pmaster

Codificação

25 mensagens neste tópico

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. 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É exatamente isto que eu precisava José Lopes !!

Nem mais nem menos!

Muito obrigado :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Obrigado :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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 ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então se tens a função para converter em md5, qual é o problema ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

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