web-dev-qa-db-fra.com

Quel algorithme de hachage spécifique est renvoyé par MessageDigest.getInstance ("SHA")?

MessageDigest.getInstance("SHA") semble fonctionner et me donne un MessageDigest, mais je ne peux pas dire quel algorithme il me donne.

Est-ce SHA-1 ou SHA-0 ou ..?


Je ne suis pas intéressé par ce qui se passe sur ma machine. Je veux savoir s'il retournera sha0 ou sha1 pour toutes les implémentations valides de Java (ou ce n'est pas défini).

27
megazord

spécification JCE répertorie les noms standard qu'une implémentation devrait prendre en charge. "SHA-1" est spécifié, tout comme SHA-256, SHA-384 et SHA-512. "SHA", "SHA-0" et SHA-2 "ne sont pas des noms standard et peuvent donc ne pas être pris en charge du tout. Vous ne pouvez pas garantir ce que" SHA "renverra, le cas échéant, car il n'est pas dans la norme.

25
Simon G.

SHA-0 est obsolète. À utiliser avec le Java JCE MessageDigest, SHA == SHA-1 pour certains fournisseurs JCE. Par ailleurs, SHA-1 n'est pas considéré comme sécurisé) avec les ordinateurs et la technologie d'aujourd'hui. SHA-512 est toujours sécurisé pour à peu près n'importe quoi. SHA-256 est toujours correct pour la plupart des choses.

Vous pouvez lister les protocoles disponibles dans la Java que vous utilisez avec ce code. (Je l'ai eu ici ):

import Java.security.Provider;
import Java.security.Security;

public class JceLook {

    public static void main(String[] args) {
        System.out.println("Algorithms Supported in this JCE.");
        System.out.println("====================");
        // heading
        System.out.println("Provider: type.algorithm -> className" + "\n  aliases:" + "\n  attributes:\n");
        // discover providers
        Provider[] providers = Security.getProviders();
        for (Provider provider : providers) {
            System.out.println("<><><>" + provider + "<><><>\n");
            // discover services of each provider
            for (Provider.Service service : provider.getServices()) {
                System.out.println(service);
            }
            System.out.println();
        }
    }
}

Il affichera des informations comme celle-ci pour tous les différents algorithmes disponibles. (Notez qu'il s'agit d'une sortie réelle du programme ci-dessus pour un certain niveau de mise à jour d'Oracle/Sun Java 6 et cela montre que SHA est équivalent à SHA-1 et SHA1. Vous pouvez passer l'une des trois chaînes à MessageDigest et obtenir le même résultat. Mais cela dépend du fournisseur de cryptographie (JCE) et peut ne pas être le même.)

Sun: MessageDigest.SHA -> Sun.security.provider.SHA
  aliases: [SHA-1, SHA1]
  attributes: {ImplementedIn=Software}

Si vous chargez des fournisseurs supplémentaires (par exemple BouncyCastle), ils s'afficheront également.

17
Lee Meador