[RESOLVIDO]Diferenças no Hashing

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

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

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

[quote]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=[/quote]

[code]
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);
}

} [/code]

Resumindo,
O que esta acontecendo rsrsrs ???

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

Se boiou na resposta, leia:

            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.

Entendi gente :stuck_out_tongue:
Imprimi o tutorial do Viny rsrsr

, Só mais uma coisa…

[quote=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.[/quote]

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

[quote=ViniGodoy][quote=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.[/quote]

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

Viny, esse projeto Towel, ele ainda esta vivo ?

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

È uma APi?
Porque aqui aparece assim :

[quote] 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
[/quote]

Acho que ele parou com o projeto…

De onde vc tirou esse jar? Do github?

E a última versão é a 1.2.2:

[quote=ViniGodoy]De onde vc tirou esse jar? Do github?

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

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

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

[quote=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!!
[/quote]

È, pq ele usou try with resources.

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!