JDK中可用的MessageDigest的完整列表

 长发及腰和我娶你D有毛关系 发布于 2022-12-31 21:33

我为此搜索了高低,但我似乎无法得到一个正确的答案.

在Java中,可用的MessageDigests由您已配置/安装的安全提供程序确定.但假设只是正常的JDK8安装(在我的情况下是1.8.0_11),那么可用的哈希算法列表是什么?从文档中的示例来看,显然MD5,SHA1和SHA-256可用,但我似乎无法获得完整,权威的列表.

此列表是否存在,或者如何查找我的特定安装?

1 个回答
  • 除了JB的答案之外,我还想提出一个解决方案来查询运行时的可用算法.这个方法当然容易地转化为一个为Cipher,SecureRandom,Mac,KeyAgreement,KeyFactory或任何其他类型的算法.

    程序

    import java.security.MessageDigest;
    import java.security.Provider;
    import java.security.Provider.Service;
    import java.security.Security;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Set;
    
    public class ShowHashAlgorithms {
    
        private static final void showHashAlgorithms(Provider prov, Class<?> typeClass) {
            String type = typeClass.getSimpleName();
    
            List<Service> algos = new ArrayList<>();
    
            Set<Service> services = prov.getServices();
            for (Service service : services) {
                if (service.getType().equalsIgnoreCase(type)) {
                    algos.add(service);
                }
            }
    
            if (!algos.isEmpty()) {
                System.out.printf(" --- Provider %s, version %.2f --- %n", prov.getName(), prov.getVersion());
                for (Service service : algos) {
                    String algo = service.getAlgorithm();
                    System.out.printf("Algorithm name: \"%s\"%n", algo);
    
    
                }
            }
    
            // --- find aliases (inefficiently)
            Set<Object> keys = prov.keySet();
            for (Object key : keys) {
                final String prefix = "Alg.Alias." + type + ".";
                if (key.toString().startsWith(prefix)) {
                    String value = prov.get(key.toString()).toString();
                    System.out.printf("Alias: \"%s\" -> \"%s\"%n",
                            key.toString().substring(prefix.length()),
                            value);
                }
            }
        }
    
        public static void main(String[] args) {
            Provider[] providers = Security.getProviders();
            for (Provider provider : providers) {
                showHashAlgorithms(provider, MessageDigest.class);
            }
        }
    }
    

    Sun提供商输出

    此代码将为Java 1.8生成以下输出.请注意,由于API提供程序的一些旧错误,提供程序版本仅作为一个提供double.因此,无法区分版本1.80或版本1.8.0.

    别名低于实际实现.这些别名中的一些是对象标识符或点符号中的 OID .这些OID用于指示ASN.1编码数据格式内的算法,例如SSL/TLS中使用的X5.09v3证书.例如,1.3.14.3.2.26{iso(1) identified-organization(3) oiw(14) secsig(3) algorithms(2) hashAlgorithmIdentifier(26)}SHA/SHA-1 的点符号和别名.

     --- Provider SUN, version 1.80 --- 
    Algorithm name: "MD2"
    Algorithm name: "MD5"
    Algorithm name: "SHA"
    Algorithm name: "SHA-224"
    Algorithm name: "SHA-256"
    Algorithm name: "SHA-384"
    Algorithm name: "SHA-512"
    Alias: "SHA-1" -> "SHA"
    Alias: "OID.1.3.14.3.2.26" -> "SHA"
    Alias: "1.3.14.3.2.26" -> "SHA"
    Alias: "OID.2.16.840.1.101.3.4.2.4" -> "SHA-224"
    Alias: "OID.2.16.840.1.101.3.4.2.3" -> "SHA-512"
    Alias: "OID.2.16.840.1.101.3.4.2.2" -> "SHA-384"
    Alias: "OID.2.16.840.1.101.3.4.2.1" -> "SHA-256"
    Alias: "2.16.840.1.101.3.4.2.4" -> "SHA-224"
    Alias: "2.16.840.1.101.3.4.2.3" -> "SHA-512"
    Alias: "2.16.840.1.101.3.4.2.2" -> "SHA-384"
    Alias: "2.16.840.1.101.3.4.2.1" -> "SHA-256"
    Alias: "SHA1" -> "SHA"
    

    Bouncy Castle提供者输出

    Bouncy Castle的输出(未被要求,包括用于比较):

     --- Provider BC, version 1.51 --- 
    Algorithm name: "GOST3411"
    Algorithm name: "MD2"
    Algorithm name: "MD4"
    Algorithm name: "MD5"
    Algorithm name: "SHA-1"
    Algorithm name: "RIPEMD128"
    Algorithm name: "RIPEMD160"
    Algorithm name: "RIPEMD256"
    Algorithm name: "RIPEMD320"
    Algorithm name: "SHA-224"
    Algorithm name: "SHA-256"
    Algorithm name: "SHA-384"
    Algorithm name: "SHA-512"
    Algorithm name: "SHA-512/224"
    Algorithm name: "SHA-512/256"
    Algorithm name: "SHA3-224"
    Algorithm name: "SHA3-256"
    Algorithm name: "SHA3-384"
    Algorithm name: "SHA3-512"
    Algorithm name: "Skein-256-128"
    Algorithm name: "Skein-256-160"
    Algorithm name: "Skein-256-224"
    Algorithm name: "Skein-256-256"
    Algorithm name: "Skein-512-128"
    Algorithm name: "Skein-512-160"
    Algorithm name: "Skein-512-224"
    Algorithm name: "Skein-512-256"
    Algorithm name: "Skein-512-384"
    Algorithm name: "Skein-512-512"
    Algorithm name: "Skein-1024-384"
    Algorithm name: "Skein-1024-512"
    Algorithm name: "Skein-1024-1024"
    Algorithm name: "SM3"
    Algorithm name: "TIGER"
    Algorithm name: "WHIRLPOOL"
    Alias: "SHA256" -> "SHA-256"
    Alias: "SHA224" -> "SHA-224"
    Alias: "1.3.36.3.2.3" -> "RIPEMD256"
    Alias: "1.3.36.3.2.2" -> "RIPEMD128"
    Alias: "1.3.36.3.2.1" -> "RIPEMD160"
    Alias: "1.2.156.197.1.401" -> "SM3"
    Alias: "SHA512" -> "SHA-512"
    Alias: "SHA1" -> "SHA-1"
    Alias: "GOST" -> "GOST3411"
    Alias: "2.16.840.1.101.3.4.2.6" -> "SHA-512/256"
    Alias: "2.16.840.1.101.3.4.2.5" -> "SHA-512/224"
    Alias: "2.16.840.1.101.3.4.2.4" -> "SHA-224"
    Alias: "2.16.840.1.101.3.4.2.3" -> "SHA-512"
    Alias: "2.16.840.1.101.3.4.2.2" -> "SHA-384"
    Alias: "2.16.840.1.101.3.4.2.1" -> "SHA-256"
    Alias: "1.2.643.2.2.9" -> "GOST3411"
    Alias: "1.3.14.3.2.26" -> "SHA-1"
    Alias: "SHA512/224" -> "SHA-512/224"
    Alias: "GOST-3411" -> "GOST3411"
    Alias: "SHA512256" -> "SHA-512/256"
    Alias: "SHA384" -> "SHA-384"
    Alias: "SM3" -> "SM3"
    Alias: "SHA" -> "SHA-1"
    Alias: "1.2.840.113549.2.5" -> "MD5"
    Alias: "1.2.840.113549.2.4" -> "MD4"
    Alias: "1.2.840.113549.2.2" -> "MD2"
    

    2022-12-31 21:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有