Quel algorithme de hachage spécifique MessageDigest.getInstance («SHA») renvoie-t-il?

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 renverra sha0 ou sha1 pour toutes les implémentations valides de Java (ou il n’est pas défini).

    La spécification JCE répertorie les noms standard qu’une implémentation est censée 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 ne peuvent donc pas être pris en charge du tout. Vous ne pouvez pas garantir ce que” SHA “renverra, voire pas du tout, car il ne figure pas dans la norme.

    SHA-0 est obsolète. A utiliser avec Java JCE MessageDigest, SHA == SHA-1 pour certains fournisseurs JCE. À propos, 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 presque tout. SHA-256 est ok pour la plupart des choses, encore.

    Vous pouvez répertorier les protocoles disponibles dans la version 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(Ssortingng[] args) { System.out.println("Algorithms Supported in this JCE."); System.out.println("===================="); // heading System.out.println("Provider: type.algorithm -> className" + "\n aliases:" + "\n atsortingbutes:\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 algorithmes disponibles. (Notez qu’il s’agit d’une sortie réelle du programme ci-dessus pour un niveau de mise à jour d’Oracle / Sun Java 6 et que SHA est équivalent à SHA-1 et SHA1. Vous pouvez transmettre 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 identique.)

     SUN: MessageDigest.SHA -> sun.security.provider.SHA aliases: [SHA-1, SHA1] atsortingbutes: {ImplementedIn=Software} 

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