[RESOLVIDO]Diferenças no Hashing

12 respostas
S

Gente, peguei uma palavra usando essa classe e Sh2-256
A palavra era "oi", deu esse resultado :

fa87955d97bbc356142f27a2a1afd4202b4756208b95ed87b661cbfa1a4fa707

Aí, eu fui nesse site : http://www.xorbin.com/tools/sha256-hash-calculator
e a mesma palavra, deu esse resultado :

87f633634cc4b02f628685651f0a29b7bfa22a0bd841f725c6772dd00a58d489

Nesse outro site : http://www.online-convert.com/result/ba453b10da20d41fff2faba41dd11847
Deu esse resultado :

hex: 87f633634cc4b02f628685651f0a29b7bfa22a0bd841f725c6772dd00a58d489
HEX: 87F633634CC4B02F628685651F0A29B7BFA22A0BD841F725C6772DD00A58D489
h:e:x: 87:f6:33:63:4c:c4:b0:2f:62:86:85:65:1f:0a:29:b7:bf:a2:2a:0b:d8:41:f7:25:c6:77:2d:d0:0a:58:d4:89
base64: h/YzY0zEsC9ihoVlHwopt7+iKgvYQfclxnct0ApY1Ik=

package Security;

import java.io.ByteArrayOutputStream;  
import java.io.DataOutputStream;  
import java.security.MessageDigest;  
import java.security.NoSuchAlgorithmException;  

  
public enum Hashing {  
    MD5("MD5"), SHA1("SHA-1"), SHA256("SHA-256"),SHA512("SHA-512");
  
    private String algo;  
  
    private Hashing(String algo) {  
        this.algo = algo;  
    }  
  
    public byte[] diggest(byte[] dados) {  
        try {  
            MessageDigest algorithm = MessageDigest.getInstance(algo);  
            return algorithm.digest(dados);  
        } catch (NoSuchAlgorithmException e) {  
            throw new RuntimeException("Unable to generate password!", e);  
        }  
    }  
  
    public String diggest(String valor) {  
        return byteArrayToString(diggest(stringToByteArray(valor)));  
    }  
  
    private String byteArrayToString(byte[] byteArray) {  
        StringBuilder sb = new StringBuilder();  
        for (byte b : byteArray) {  
            int value = b & 0xFF;  
            if (value < 16) {
                sb.append("0");
            }  
            sb.append(Integer.toString(value, 16));  
        }  
        return sb.toString();  
    }  
  
    private byte[] stringToByteArray(String valor) {  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        try (DataOutputStream dos = new DataOutputStream(bos)) {  
            dos.writeUTF(valor);  
        } catch (Exception e) {  
            assert (false); // Nunca ocorre com ByteArrays  
        }  
        return bos.toByteArray();  
    }  
    
    
    public static void main(String args[])
    {
        String diggest = SHA256.diggest("oi");
        System.out.println(diggest);
    }
    
    
 
}

Resumindo,
O que esta acontecendo rsrsrs ???

12 Respostas

V

Provavelmente os sites estão usando codificações diferentes para a String.

Se boiou na resposta, leia:

E
dos.writeUTF(valor);

writeUTF escreve os seguintes 6 bytes: 00 00 00 02 6f 69

Os sites usam apenas os 2 bytes 6f 69

Obviamente o resultado será diferente.

S

Entendi gente :stuck_out_tongue:
Imprimi o tutorial do Viny rsrsr

, Só mais uma coisa…

V

entanglement:
dos.writeUTF(valor);

writeUTF escreve os seguintes 6 bytes: 00 00 00 02 6f 69

Os sites usam apenas os 2 bytes 6f 69

Obviamente o resultado será diferente.

A classe que ele postou eu escrevi para ser compatível com o flash, que também usa UTF-8.

S

ViniGodoy:
entanglement:
dos.writeUTF(valor);

writeUTF escreve os seguintes 6 bytes: 00 00 00 02 6f 69

Os sites usam apenas os 2 bytes 6f 69

Obviamente o resultado será diferente.

A classe que ele postou eu escrevi para ser compatível com o flash, que também usa UTF-8.

Viny, esse projeto Towel, ele ainda esta vivo ?

V

A princípio sim, mas quem coordena o projeto é o Mark Vasconcelos.

S

È uma APi?
Porque aqui aparece assim :

Filename ▼ Summary + Labels ▼ Uploaded ▼ ReleaseDate ▼ Size ▼ DownloadCount ▼ …
Announcement.txt Announcement Featured Feb 2011 Feb 2011 153 bytes 348
towel-v1.0.jar Towel v1.0 Deprecated Dec 2010 369 KB 168

Acho que ele parou com o projeto…

V

De onde vc tirou esse jar? Do github?

E a última versão é a 1.2.2:

S

ViniGodoy:
De onde vc tirou esse jar? Do github?

E a última versão é a 1.2.2:
https://github.com/MarkyVasconcelos/Towel/downloads

Hmm , de dois anos atrás.
Então, eu peguei o link da sua assinatura :stuck_out_tongue:

D

Desculpa reviver o tópico, porém já tinha visto essa enum do Vini Godoy Aqui e ao rever nesse post me gerou uma dúvida. No método stringToByteArray o trecho:

try (DataOutputStream dos = new DataOutputStream(bos)) { dos.writeUTF(valor); }
Não deveria ser:

try { DataOutputStream dos = new DataOutputStream(bos); dos.writeUTF(valor); }
Se alguém, ou o próprio Vini puder me explicar porque o código para o DataOutputStream está localizado entre parênteses () antes de abrir ({) o bloco do try?
Grato!!

S

d10g3n35:
Desculpa reviver o tópico, porém já tinha visto essa enum do Vini Godoy Aqui e ao rever nesse post me gerou uma dúvida. No método stringToByteArray o trecho:

try (DataOutputStream dos = new DataOutputStream(bos)) { dos.writeUTF(valor); }
Não deveria ser:

try { DataOutputStream dos = new DataOutputStream(bos); dos.writeUTF(valor); }
Se alguém, ou o próprio Vini puder me explicar porque o código para o DataOutputStream está localizado entre parênteses () antes de abrir ({) o bloco do try?
Grato!!

È, pq ele usou try with resources.

D

Muito obrigado cara… Não conhecia ainda, então a partir de sua resposta já fui pesquisar e gostei do que encontrei em relação a esse recursos como a outros implementados no Java 7.
Valeu!

Criado 12 de fevereiro de 2013
Ultima resposta 20 de mai. de 2013
Respostas 12
Participantes 4