Criptografia em SHA-1!

9 respostas
V

Seguinte pessoal… tenho uma aplicaçao em aspx que faz criptografia em SHA1 na senha do usuario !!!

Gostaria de saber c eu fizer uma criptografia em SHA-1 em java é possivel comparar com o SHA-1 que foi gerado pelo aspx e incluido no BD??? Que eu saiba sim, porem a criptografia q o java esta gerando esta totalmente diferente do que esta no banco de dados !!!

Segue o codigo de criptografia q estou usando:

String senha =""; try { MessageDigest criptografar = MessageDigest.getInstance("SHA-1"); criptografar.digest(textPassword.getText().getBytes()); BASE64Encoder encoder = new BASE64Encoder (); senha = encoder.encode(criptografar.digest()); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); }

VLW

9 Respostas

G

Você está utilizando BASE64 para codificar o seu hash no aspx? Tente comparar com o digest sem fazer o encode…

T

Só uma perguntinha. Digamos que a senha do usuário seja "joão".
Qual é o valor do SHA-1 que a aplicação ASP.NET está gerando?

Abaixo anexo um programa que tenta várias codificações de strings no Java e seus SHA-1 correspondentes.

import sun.misc.*;
import java.security.*;

class TesteSHA1 {
    
    private void printSHA1 (byte[] bytes) throws Exception {
        MessageDigest sha1 = MessageDigest.getInstance ("SHA-1");
        BASE64Encoder enc = new BASE64Encoder();
        byte[] sha1Bytes = sha1.digest (bytes);
        
        System.out.println ("Bytes: ");
        for (int i = 0; i &lt bytes.length; ++i) {
            System.out.print (Integer.toHexString ((bytes[i] & 0xFF) | 0x100).substring(1).toUpperCase() + " ");
        }
        System.out.println ();
        System.out.println ("SHA-1 = " + enc.encode (sha1Bytes));
    }
    public void teste(String senha) throws Exception {
        System.out.println ("Codificação UTF-16LE");
        printSHA1 (senha.getBytes("UTF-16LE"));
        System.out.println ("Codificação UTF-16BE");
        printSHA1 (senha.getBytes("UTF-16BE"));
        System.out.println ("Codificação UTF-8");
        printSHA1 (senha.getBytes("UTF-8"));
        System.out.println ("Codificação ISO-8859-1");
        printSHA1 (senha.getBytes("ISO-8859-1"));
        System.out.println ("Codificação Windows-1252");
        printSHA1 (senha.getBytes("Windows-1252"));
    }
    
    public static void main(String[] args) throws Exception {
        TesteSHA1 t = new TesteSHA1();
        String senha = "joão";
        System.out.println ("Tentando com a senha \"" + senha + "\"");
        t.teste(senha);
    }
}

O resultado do programa acima para a senha "joão".

Tentando com a senha "joão"
Codificação UTF-16LE
Bytes: 
6A 00 6F 00 E3 00 6F 00 
SHA-1 = V2VvSeumHWeCk8k2o4w09GcuowQ=
Codificação UTF-16BE
Bytes: 
00 6A 00 6F 00 E3 00 6F 
SHA-1 = GI8N9mzvPeoQAArOWNhv1gqp1ZI=
Codificação UTF-8
Bytes: 
6A 6F C3 A3 6F 
SHA-1 = nx0cGTaGVt+4SMadVw87mNG7zDM=
Codificação ISO-8859-1
Bytes: 
6A 6F E3 6F 
SHA-1 = 47Tb0ToGc5w8Z5YZHi4Q4YqPa1Y=
Codificação Windows-1252
Bytes: 
6A 6F E3 6F 
SHA-1 = 47Tb0ToGc5w8Z5YZHi4Q4YqPa1Y=
V

Acho q me expressei mal… seguinte, a criptografia gerada pelo aspx esta armazenada no BD. Eu prefiso fazer a criptografia igual a do aspx para gerar o mesmo SHA-1 para eu comparar com o q tem no BD

Eu rodei o programa acima e nao deu o hash q tem no BD!!!

Alguem sabe se é possivel fazer o q eu quero ??

F

Já tive problemas com criptografia também. Seguinte, dependendo do ambiente eu sei que tem diferença, mas o maior problema é o seguinte: quando você faz o digest de uma string, você deveria gerar um código hexadecimal deste digest e gravá-lo no banco. Por quê? Simples: porque a maioria dos caracteres não ASCII são perdidos, mudados para outras coisas (como a interrogação " ? "). Ô thingol, foi você mesmo quem me deu o toque… lembrado? Será que o caso dele não é o mesmo meu?

Temos um sistema hoje rodando no MySQL e precisamos migrar ele para o Oracle. Infelizmente não tivemos como migrar as senhar por causa desse “probleminha” que não tinha sido previsto por quem desenvolveu a “criptografia” da senha. Ou seja, vamos ter de gerar novas senhas. Solução? Alteramos a forma de gravar no banco (gerando hexadecimal) e zeramos as senhas de todos os usuários. Pelo menos se tivermos que migrar novamente de banco não vamos ter problemas.

L

pessoal,

alguem poderia me ajudar… estou começando a estudar criptografia…

eu precisava de um exemplo simples de uma classe que criptografa uma string em sha-1 e outra classe que conseguisse ler o dado criptografado…

eu vou guardar esse dado em um banco e precisava de um código para conseguir ler esse dado criptografado…

se alguem puder dizer pelo menos por onde eu começo… ou me der umas dicas…

obrigado pela atenção…

T

O exemplo para calcular o SHA-1 de uma string já foi postado neste mesmo tópico. Para ler o tal dado, procure por “JDBC”.

L

olá… eu já consegui criptografar a string…

sei que eu devo armazena-la criptografada no banco e compará-la com a String criptografada que o usuário digitar…

mas minha dúvida agora é: tem como eu passar uma chave para alguem conseguir ler este dado criptogrado…
e se tem como, alguem sabe a maneira de fazer isso…

T

Vou explicar pela enésima vez:

SHA-1, MD5 e outros algoritmos de hash não fazem criptografia.
O que eles fazem é achar um número que está relacionado com a sua entrada.
Esse número pode ser o mesmo para entradas diferentes, mas a probabilidade é infinitesimal.
Portanto, se você fizer duas entradas e o hash bater, então supõe-se que as entradas são as mesmas.
Você pode, por exaustão, tentar achar uma senha que bata com a senha que está cadastrada no banco (por exemplo, digamos que no banco tivéssemos cadastrado o SHA-1 “47Tb0ToGc5w8Z5YZHi4Q4YqPa1Y=” e eu soubesse que o nome do seu filho é “João”, da sua esposa “Maria” e do seu cachorro “Totó”. Eu tentaria achar algumas palavras cujo SHA-1 batesse - tentaria, por exemplo, “João”, “joão”, “joao”, “Maria”, “MARIA”, “maria” etc.). Mas não dá para achar uma chave que abra TODAS as senhas.

L

ah tah… agora eu entendi…

valeu mesmo pela explicação, agora fikou claro para mim…

:slight_smile:

Criado 14 de março de 2007
Ultima resposta 19 de jun. de 2008
Respostas 9
Participantes 5