- Caracteristici generale
JCE implementeaza servicii criptografice specificate in cadrul mai larg al JCA (furrnizorul de servicii criptografice "SunJCE")
- cifrurile DES, Triple DES, Blowfish in modurile
- generatoare de chei pentru
- DES
- Triple DES
- Blowfish
- HMAC-MD5
- HMAC-SHA1
- MD5 cu PBE pentru DES-CBC (PKCS#5)
- generatoare de obiecte cheie si conversia catre/de la informatia de cheie pentru cifruri simetrice: DES, Triple DES si PBE si asimetrice: Diffie-Hellman
- acordul Diffie-Hellman asupra cheilor pentru mai multe entitati
- generator Diffie-Hellman de perechi de chei
- generator de parametri pentru algoritmul Diffie-Hellman
- implementare HMAC-MD5 si HMAC-SHA1 pentru algoritmi de hash (RFC 2104)
- implementare pentru schema de aliniere PKCS#5
- magazia de chei, JCEKS, pentru schema proprietara
si este un cadru de lucru (javax.crypto) care permite implementari proprietare pentru servicii criptografice.
- Detalii
- Clase de baza
-
- clasa cifru
-
- crearea unui obiect Cipher
- public static Cipher getInstance(String transformation)
- public static Cipher getInstance(String transformation , String provider)
transformation este de forma
- "algorithm/mode/padding"
- "algorithm"
ce au domeniile
- algorithm
- AES
- ARCFOUR/RC4
- Blowfish
- DES
- DESede
- ECIES
- PBEWith<digest>And<encryption> sau PBEWith<prf>And<encryption>
- RC2, RC4 sau RC5
- RSA
- mode
- NONE
- CBC (FIPS PUB 81)
- CFB (FIPS PUB 81)
- ECB (FIPS PUB 81)
- OFB (FIPS PUB 81)
- PCBC (Kerberos v4)
- padding
- ISO10126Padding
- NoPadding
- OAEPWith<digest>And<mgf>Padding (Optimal Asymmetric Encryption Padding, PKCS#1)
- PKCS5Padding
- SSL3Padding
- initializarea unui obiect Cipher
- public void init(int opmode , Key key)
- public void init(int opmode , Certificate certificate )
- public void init(int opmode , Key key , SecureRandom random)
- public void init(int opmode , Certificate certificate , SecureRandom random)
- public void init(int opmode , Key key , AlgorithmParameterSpec params)
- public void init(int opmode , Key key , AlgorithmParameterSpec params, SecureRandom random)
- public void init(int opmode , Key key , AlgorithmParameters params)
- public void init(int opmode , Key key , AlgorithmParameters params, SecureRandom random)
unde opmode are domeniul
- ENCRYPT_MODE
criptare
- DECRYPT_MODE
decriptare
- WRAP_MODE
impachetarea cheii pentru transport
- UNWRAP_MODE
despachetarea cheii intr-un obiect java.security.Key
- criptarea si decriptarea
- intr-un singur pas
- public byte[] doFinal(byte[] input)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output , int outputOffset)
- in mai multi pas
- apel repetat pentru metodele
- public byte[] update(byte[] input)
- public byte[] update(byte[] input , int inputOffset , int inputLen)
- public byte[] update(byte[] input , int inputOffset , int inputLen , byte output)
- public byte[] update(byte[] input , int inputOffset , int inputLen , byte output , int outputOffset)
- urmate de un singur apel al
- public byte[] doFinal(byte[] input)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output)
- public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output , int outputOffset)
- public byte[] doFinal()
- public byte[] doFinal(byte[] input , int outputOffset)
orice apel la o metoda doFinal reseteaza obiectul aducandu-l in starea de dupa initializare
- impachetarea si despachetarea cheilor
- impachetarea
public final byte[] wrap(Key key)
- despachetarea
sunt necesare
- cheia impachetata
- numele algoritmului pentru cheie
- tipul cheii impachetate (Cipher.SECRET_KEY, Cipher.PRIVATE_KEY , Cipher.PUBLIC_KEY)
public final Key unwrap(byte[] wrappedKey , String wrappedKeyAlgorithm , int wrappedKeyType)
- gestionarea parametrilor algoritmului
- consideratii asupra iesirii
daca se utilizeaza una dintre metodele doFinal care permite specificarea buffer-ului de iesire se poate utiliza metoda
public int getOutputSize(int inputLen)
pentru a verifica daca acesta este suficient
- clase cifru fluide
-
- clasa cifru fluid de intrare
-
CipherInputStream
este un FilterInputStream care foloseste un Cipher (care trebuie initializat inainte de utilizarea CipherInputStream);este importanta utilizarea doar a metodelor care au fost suprascrise sau definite in aceasta clasa;
- clasa cifru fluid de iesire
-
CipherOutputStream
- clasa generator de chei
pentru algoritmi simetrici
- crearea unui obiect KeyGenerator
- public static KeyGenerator getInstance(String algorithm)
- public static KeyGenerator getInstance(String algorithm , String provider)
unde algorithm are domeniul
- AES
- ARCFOUR/RC4
- Blowfish
- DES
- DESeed
- HmacMD5
- HmacSHA1
- HmacSHA256
- HmacSHA384
- HmacSHA512
- RC2
- initializarea unui obiect KeyGenerator
- initializare independenta de algoritm
- public void init (SecureRandom random)
- public void init(int keysize)
- public void init (int keysize , SecureRandom random)
- initializare specifica unui algoritm
- public void init(AlgorithmParameterSpec params)
- public void init(AlgorithmParameterSpec params , SecureRandom random)
- crearea unei chei
public SecretKey generateKey()
-
- clasa convertor obiecte cheie/specificatii de cheie pentru chei simetrice
-
- un obiect javax.crypto.SecretKeyFactory lucreaza pe chei simetrice
- un obiect java.security.KeyFactory lucreaza pe o pereche de chei asimetrice
- clasa obiect sigilat
-
un obiect a carui confidentialitate este asigurata de un algoritm criptografic
- clasa acord asupra cheilor
-
asigura functionalitatea unui protocol de acord asupra cheilor
cheile implicate implicate in distributia unui secret sunt create
- de catre generatoare de chei: KeyPairGenerator, KeyGenerator
- de catre KeyFactory
- ca rezultat al unei faze intermediare a unui protocol de acord asupra cheilor
utilizare
- crearea unui obiect KeyAgreement
- public static KeyAgreement getInstance(String algorithm)
- public static KeyAgreement getInstance(String algorithm , String provider)
algorithm avand domeniul
- DiffieHellman (PKCS#3)
- ECDH (Elliptic Curve Diffie-Hellman, RFC3278)
- ECMQV (Elliptic Curve Menezes-Qu-Vanstone)
- initializarea unui obiect KeyAgreement
initializarea se face cu o cheie privata si suplimentar prin specificarea unei surse pseudoaleatoare si a unei multimi de parametri de algoritm
- public void init(Key key)
- public void init(Key key , SecureRandom random)
- public void init(Key key , AlgorithmParameterSpec params)
- public void init(Key key , AlgorithmParameterSpec params , SecureRandom random)
- realizarea fazei de acord
rularea cel putin o data a metodei
public Key doPhase(Key key , boolean lastPhase)
pentru care key este o cheie publica sau o cheie interemediara generata in faza anterioara
- generarea secretului partajat
prin apelul uneia din metodele
- public byte[] generateSecret()
- public int generateSecret(byte[] sharedSecret , int offset)
- public SecretKey generateSecret(String algorithm)
- clasa cod de autentificare mesaj
-
- crearea unui obiect Mac
- public static Mac getInstance(String algorithm)
- public static Mac getInstance(String algorithm , String provider)
unde algorithm are domeniul
- HmacMD5
- HmacSHA1
- HmacSHA256
- HmacSHA384
- HmacSHA512
- PBEWith<mac>
- initializarea unui obiect Mac
- public void init(Key key)
- public void init(Key key , AlgorithmParameterSpec params)
key este un obiect care implementeaza interfata javax.crypto.SecretKey
- calcularea valorii de MAC
- intr-un singur pas
public byte[] doFinal(byte[] input)
- in mai multi pasi
apel repetat la una dintre metodele
- public void update(byte input)
- public void update(byte[] input)
- public void update(byte[] input , int inputOffset , int inputLen)
si un apel de terminare la una dintre metodele
- public byte[] doFinal()
- public byte[] doFinal(byte[] input)
- public byte[] doFinal(byte[] output , int outOffset)
# posted by Sorin Badescu @ 3:06 PM