首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 加密算法大全:JCA 提供者架構、標準算法名稱與程式碼查詢實戰

     編輯:Java 綜合教學

Java 加密算法大全:JCA 架構與標準名稱

Java Cryptography Architecture (JCA) 採用提供者模式,算法由安全提供者實作。常見提供者:SUN、SunRsaSign、SunEC、SunJSSE、SunJCE、SunJGSS、SunSASL、XMLDSig、SunPCSC、SunMSCAPI。

一、核心 API 用法

KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
MessageDigest md = MessageDigest.getInstance("MD5");

字串參數為標準算法名稱,不區分大小寫(內部以 LowerCase 匹配)。

二、程式碼查詢所有可用算法

Provider[] providers = Security.getProviders();
for (Provider p : providers) {
    System.out.println("Provider: " + p.getName());
    for (Provider.Service s : p.getServices()) {
        System.out.printf("  Type: %-25s Algorithm: %s%n", s.getType(), s.getAlgorithm());
    }
}

三、主要算法類型與標準名稱對照表

Service Type對應 Java 類常見算法名稱
MessageDigestjava.security.MessageDigestMD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512
Signaturejava.security.SignatureSHA1withRSA, SHA256withRSA, NONEwithDSA, SHA1withECDSA
Cipherjavax.crypto.CipherAES, DES, DESede(3DES), Blowfish, RC2, ARCFOUR, RSA
KeyGeneratorjavax.crypto.KeyGeneratorAES, DES, DESede, Blowfish, RC2, ARCFOUR, HmacSHA256
KeyPairGeneratorjava.security.KeyPairGeneratorRSA, DSA, EC, DiffieHellman
KeyAgreementjavax.crypto.KeyAgreementDiffieHellman, ECDH
Macjavax.crypto.MacHmacMD5, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512
SecretKeyFactoryjavax.crypto.SecretKeyFactoryPBKDF2WithHmacSHA1, DES, DESede, PBEWithMD5AndDES
AlgorithmParametersjava.security.AlgorithmParametersAES, DES, EC, DiffieHellman, OAEP, PBE
KeyStorejava.security.KeyStoreJKS, JCEKS, PKCS12, Windows-MY, Windows-ROOT
SSLContextjavax.net.ssl.SSLContextTLSv1, TLSv1.1, TLSv1.2, Default
SecureRandomjava.security.SecureRandomSHA1PRNG, Windows-PRNG
CertificateFactoryjava.security.cert.CertificateFactoryX.509

四、提供者優先順序

JCA 按 java.security 文件中 security.provider.N 順序查找,第一個支援該算法的提供者勝出。可動態調整:

Security.insertProviderAt(new BouncyCastleProvider(), 1);

五、實務建議

  • 優先使用標準名稱(如 AES 而非 AES/ECB/PKCS5Padding),讓提供者選預設模式
  • 生產環境建議明確指定 Transformation(如 AES/GCM/NoPadding)
  • 引入 BouncyCastle 獲得更多算法(SM2/SM3/SM4 國密算法)
  • 算法名稱不區分大小寫,KeyGenerator.getInstance("aEs") 也能工作
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved