How can I list the available Cipher algorithms?

后端 未结 5 978
清歌不尽
清歌不尽 2020-11-28 15:47

I am getting a Cipher implementation with Cipher.getInstance(String algorithm). I am under the impression that the available algorithm names that I may pass di

5条回答
  •  误落风尘
    2020-11-28 16:12

    To get a list of available cipher transformation names, use this code snippet:

    TreeSet algs = new TreeSet<>();
    for (Provider provider : Security.getProviders()) {
        provider.getServices().stream()
                              .filter(s -> "Cipher".equals(s.getType()))
                              .map(Service::getAlgorithm)
                              .forEach(algs::add);
    }
    algs.stream().forEach(System.out::println);
    

    Those names are compatible to be called via Cipher.getInstance(). If an entry is missing the feedback mode or padding scheme, the JVM will fallback to the corresponding default.

    AES
    AESWrap
    AESWrap_128
    AESWrap_192
    AESWrap_256
    AES_128/CBC/NoPadding
    AES_128/CFB/NoPadding
    AES_128/ECB/NoPadding
    AES_128/GCM/NoPadding
    AES_128/OFB/NoPadding
    AES_192/CBC/NoPadding
    AES_192/CFB/NoPadding
    AES_192/ECB/NoPadding
    AES_192/GCM/NoPadding
    AES_192/OFB/NoPadding
    AES_256/CBC/NoPadding
    AES_256/CFB/NoPadding
    AES_256/ECB/NoPadding
    AES_256/GCM/NoPadding
    AES_256/OFB/NoPadding
    ARCFOUR
    Blowfish
    ChaCha20
    ChaCha20-Poly1305
    DES
    DESede
    DESedeWrap
    PBEWithHmacSHA1AndAES_128
    PBEWithHmacSHA1AndAES_256
    PBEWithHmacSHA224AndAES_128
    PBEWithHmacSHA224AndAES_256
    PBEWithHmacSHA256AndAES_128
    PBEWithHmacSHA256AndAES_256
    PBEWithHmacSHA384AndAES_128
    PBEWithHmacSHA384AndAES_256
    PBEWithHmacSHA512AndAES_128
    PBEWithHmacSHA512AndAES_256
    PBEWithMD5AndDES
    PBEWithMD5AndTripleDES
    PBEWithSHA1AndDESede
    PBEWithSHA1AndRC2_128
    PBEWithSHA1AndRC2_40
    PBEWithSHA1AndRC4_128
    PBEWithSHA1AndRC4_40
    RC2
    RSA
    RSA/ECB/PKCS1Padding
    

    see also JDK doc cipher algorithm names

    To get a list of available TLS cipher suites, use this one-liner:

    $ jrunscript -e "java.util.Arrays.asList(javax.net.ssl.SSLServerSocketFactory.getDefault().getSupportedCipherSuites()).stream().forEach(println)"

    Which outputs for JDK11:

    TLS_AES_128_GCM_SHA256
    TLS_AES_256_GCM_SHA384
    TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    TLS_RSA_WITH_AES_256_GCM_SHA384
    TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
    TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
    TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
    TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
    TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    TLS_RSA_WITH_AES_128_GCM_SHA256
    TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
    TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
    TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
    TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
    TLS_RSA_WITH_AES_256_CBC_SHA256
    TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
    TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
    TLS_RSA_WITH_AES_256_CBC_SHA
    TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
    TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
    TLS_DHE_RSA_WITH_AES_256_CBC_SHA
    TLS_DHE_DSS_WITH_AES_256_CBC_SHA
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    TLS_RSA_WITH_AES_128_CBC_SHA256
    TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
    TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
    TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
    TLS_RSA_WITH_AES_128_CBC_SHA
    TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
    TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
    TLS_DHE_RSA_WITH_AES_128_CBC_SHA
    TLS_DHE_DSS_WITH_AES_128_CBC_SHA
    

提交回复
热议问题