zbeng Posted December 17, 2006 Report Share Posted December 17, 2006 Extensia de criptografie Java (JCE) * Caracteristici generale JCE implementeaza servicii criptografice specificate in cadrul mai larg al JCA (furrnizorul de servicii criptografice "SunJCE") o cifrurile DES, Triple DES, Blowfish in modurile + ECB + CBC + CFB + OFB + PCBC o generatoare de chei pentru + DES + Triple DES + Blowfish + HMAC-MD5 + HMAC-SHA1 o MD5 cu PBE pentru DES-CBC (PKCS#5) o generatoare de obiecte cheie si conversia catre/de la informatia de cheie pentru cifruri simetrice: DES, Triple DES si PBE si asimetrice: Diffie-Hellman o acordul Diffie-Hellman asupra cheilor pentru mai multe entitati o generator Diffie-Hellman de perechi de chei o generator de parametri pentru algoritmul Diffie-Hellman o implementare HMAC-MD5 si HMAC-SHA1 pentru algoritmi de hash (RFC 2104) o implementare pentru schema de aliniere PKCS#5 o magazia de chei, JCEKS, pentru schema proprietara si este un cadru de lucru (javax.crypto) care permite implementari proprietare pentru servicii criptografice. * Detalii o 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 o AES o ARCFOUR/RC4 o Blowfish o DES o DESede o ECIES o PBEWith<digest>And<encryption> sau PBEWith<prf>And<encryption> o RC2, RC4 sau RC5 o RSA * mode o NONE o CBC (FIPS PUB 81) o CFB (FIPS PUB 81) o ECB (FIPS PUB 81) o OFB (FIPS PUB 81) o PCBC (Kerberos v4) * padding o ISO10126Padding o NoPadding o OAEPWith<digest>And<mgf>Padding (Optimal Asymmetric Encryption Padding, PKCS#1) o PKCS5Padding o 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 o public byte[] update(byte[] input) o public byte[] update(byte[] input , int inputOffset , int inputLen) o public byte[] update(byte[] input , int inputOffset , int inputLen , byte output) o public byte[] update(byte[] input , int inputOffset , int inputLen , byte output , int outputOffset) * urmate de un singur apel al o public byte[] doFinal(byte[] input) o public byte[] doFinal(byte[] input , int inputOffset , int inputLen) o public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output) o public byte[] doFinal(byte[] input , int inputOffset , int inputLen , byte[] output , int outputOffset) o public byte[] doFinal() o 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 o 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 o 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() o 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 o clasa obiect sigilat un obiect a carui confidentialitate este asigurata de un algoritm criptografic o 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, RFC327b) # 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) o 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) Quote Link to comment Share on other sites More sharing options...