Newsgroup: it.comp.java
Titolo: cerco funzione o libreria per hash sha-2

Per criptare password, cerco una funzione o una libreria per java che mi 
crei un hash con sha-2 o sha-3 a 256 bit o 512 bit
 
in rete ho trovato queste note:
 
AVVERTENZA
Date le restrizioni all'esportazione di codice crittografico in forma 
binaria dagli USA,
il codice standard Sun per la Java Security e per la Java Cryptographic 
Extension (JCE)
non può essere esportato (né scaricato via Internet!) dagli Stati Uniti.
Per questo motivo occorre procurarsi librerie equivalenti prodotte in Europa 
(o comunque 
fuori dagli USA), come Cryptix e IAIK-JCE
 
The java.lang.String.getBytes(String charsetName) method, for obtaining a 
byte sequence from the input String, specifying a fixed encoding ("UTF-8").
 
Penso che alla fine il migliore sia questi:
 
http://www.jasypt.org/features.html
 
perche' si puo' integrare in apache wicket
 
e
 
 
http://www.mkyong.com/java/java-sha-hashing-example/
 
 
che riporta:
 
SHA-2 is believe the most secure hashing algorithm as this article is 
written, here are few examples for the SHA implementation. The possible 
MessageDigest algorithm are SHA-1, SHA-256, SHA-384, and SHA-512, you can 
check the reference for the detail.
 
 
VOI CHE CONSIGLIATE? Quale e' il migliore?

 VOI CHE CONSIGLIATE? Quale e' il migliore?
 
A parte la terminologia (l'hash non e' una cifratura ma una funzione non 
invertibile), puoi usare semplicemente java.security:
==============================================================
import java.security.*;
class Demo {
     public static void main(String args[]) throws Exception {
         String text = "prova";
         String hash = "";
         MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); 
 
         byte[] bytes = sha256.digest(text.getBytes());
         for (byte b:bytes)
             hash += String.format("%02x", b);
         System.out.println(hash);
     }
}
==============================================================
Ciao

 Ciao
 
Non ho risposto completamente alla tua domanda.
 
Leggendo qui:
http://java.sun.com/developer/onlineTraining/Security/Fundamentals/Security.html
 
 
mi pare di capire che:
The java.security package contains classes that are not subject to 
export controls (like Signature and MessageDigest).
 
Ciao.

 export controls (like Signature and MessageDigest).
 
Stessa frase, in un documento piu' aggiornato:
http://docs.oracle.com/javase/7/docs/technotes/guides/security/overview/jsoverview.html
 

 
Non ci ho capito molto, ma quale e' il succo di tutto questo?
Il programma java funziona bene, quindi significa che ho le librerie della 
sun nel mio sistema linux, ti ringrazio moltissimo.
 
Ho solo un dubbio:
il tuo codice mi restituisce:
6258a5e0eb772911d4f92be5b5db0e14511edbe01d1d0ddd1d5a2cb9db9a56ba
 
mentre daa linea di comando linux ho:
 
 echo "prova" | sha256sum 
fee6322b7ef5a256369358a96e9314b05047447a3055215a21ed0330b6871aed  -
 
 
Forse dipende dal CR o LF daccapo, o dalla codifica?
Una stringa in un programma java, e' codificata in UTF-8 di default?


 Forse dipende dal CR o LF daccapo, o dalla codifica?
 
La prima che hai detto, dipende dal CR/LF.
Basta che usi "echo -n":
 
echo -n "prova" | sha256sum
6258a5e0eb772911d4f92be5b5db0e14511edbe01d1d0ddd1d5a2cb9db9a56ba
 
Ciao


Ti ringrazio. Tutto chiaro e tutto ok.