Java Cryptography Architecture (JCA) 採用提供者模式,算法由安全提供者實作。常見提供者:SUN、SunRsaSign、SunEC、SunJSSE、SunJCE、SunJGSS、SunSASL、XMLDSig、SunPCSC、SunMSCAPI。
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 類 | 常見算法名稱 |
|---|---|---|
| MessageDigest | java.security.MessageDigest | MD2, MD5, SHA-1, SHA-256, SHA-384, SHA-512 |
| Signature | java.security.Signature | SHA1withRSA, SHA256withRSA, NONEwithDSA, SHA1withECDSA |
| Cipher | javax.crypto.Cipher | AES, DES, DESede(3DES), Blowfish, RC2, ARCFOUR, RSA |
| KeyGenerator | javax.crypto.KeyGenerator | AES, DES, DESede, Blowfish, RC2, ARCFOUR, HmacSHA256 |
| KeyPairGenerator | java.security.KeyPairGenerator | RSA, DSA, EC, DiffieHellman |
| KeyAgreement | javax.crypto.KeyAgreement | DiffieHellman, ECDH |
| Mac | javax.crypto.Mac | HmacMD5, HmacSHA1, HmacSHA256, HmacSHA384, HmacSHA512 |
| SecretKeyFactory | javax.crypto.SecretKeyFactory | PBKDF2WithHmacSHA1, DES, DESede, PBEWithMD5AndDES |
| AlgorithmParameters | java.security.AlgorithmParameters | AES, DES, EC, DiffieHellman, OAEP, PBE |
| KeyStore | java.security.KeyStore | JKS, JCEKS, PKCS12, Windows-MY, Windows-ROOT |
| SSLContext | javax.net.ssl.SSLContext | TLSv1, TLSv1.1, TLSv1.2, Default |
| SecureRandom | java.security.SecureRandom | SHA1PRNG, Windows-PRNG |
| CertificateFactory | java.security.cert.CertificateFactory | X.509 |
JCA 按 java.security 文件中 security.provider.N 順序查找,第一個支援該算法的提供者勝出。可動態調整:
Security.insertProviderAt(new BouncyCastleProvider(), 1);
AES 而非 AES/ECB/PKCS5Padding),讓提供者選預設模式Transformation(如 AES/GCM/NoPadding)KeyGenerator.getInstance("aEs") 也能工作