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