1 / 20

Spezielle Package in JDK 1.4

Spezielle Package in JDK 1.4. von Alexander Fomenko Dmitri Roon. Packge javax.crypto. Definiert Klassen und Interfaces für kryptologische Operationen ein Teil der Java Cryptographie Extension (JCE) Provider-basiert

lecea
Download Presentation

Spezielle Package in JDK 1.4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spezielle Package in JDK 1.4 von Alexander Fomenko Dmitri Roon Packge javax.crypto

  2. Definiert Klassen und Interfaces für kryptologische Operationen ein Teil der Java Cryptographie Extension (JCE) Provider-basiert JCE wird mit einem kryptographischen Provider namens „SunJCE“ ausgeliefert Package javax.crypto Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi Exceptions BadPaddingException ExemptionMechanismException IllegalBlockSizeException NoSuchPaddingException ShortBufferException Interfaces SecretKey

  3. Wichtigsten Klassen Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi • Zentrale Klasse • Cipher • Ver- und Entschlüsselung von Byte-Arrays verschlüsseln DATEN CODIERTE DATEN entschlüsseln

  4. FELDER static int DECRYPT_MODE static int ENCRYPT_MODE static int PRIVATE_KEY static int PUBLIC_KEY static int SECRET_KEY static int UNWRAP_MODE static int WRAP_MODE Cipher KONSTRUKTOREN: protected Cipher(CipherSpi cipherSpi, Provider provider, String transformation) METHODEN 1: byte[] doFinal() byte[] doFinal(byte[] input) int doFinal(byte[] output, int outputOffset) byte[] doFinal(byte[] input, int inputOffset, int inputLen) int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output) int doFinal(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) String getAlgorithm() int getBlockSize() ExemptionMechanism getExemptionMechanism() static Cipher getInstance(String transformation) static Cipher getInstance(String transformation, Provider provider) static Cipher getInstance(String transformation, String provider) ver-oder entschlüsseln nur ein einzelnes Byte-Array durch Aufruf der Methode bekommt man Cipher-Objekt

  5. Cipher METHODEN 2: byte[] getIV() int getOutputSize(int inputLen) AlgorithmParameters getParameters() Provider getProvider() void init(int opmode, Certificate certificate) void init(int opmode, Certificate certificate, SecureRandom random) void init(int opmode, Key key) void init(int opmode, Key key, AlgorithmParameters params) void init(int opmode, Key key, AlgorithmParameterSpec params) void init(int opmode, Key key, AlgorithmParameterSpec params, SecureRandom random) void init(int opmode, Key key, AlgorithmParameters params, SecureRandom random) void init(int opmode, Key key, SecureRandom random) Key unwrap(byte[] wrappedKey, String wrappedKeyAlgorithm, int wrappedKeyType) byte[] update(byte[] input) byte[] update(byte[] input, int inputOffset, int inputLen) int update(byte[] input, int inputOffset, int inputLen, byte[] output) int update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset) byte[] wrap(Key key) Initialisiert Cipher-Objekt für Ver- oder Entschlüsselung ver- oder entschlüsseln mehr als ein Array mit Daten oder aus einer Stream Quelle (schließlich das letzte Array an doFinal() übergeben)

  6. Initialisieren Klasse Chipher static Cipher getInstance(String transformation) static Cipher getInstance(String transformation, Provider provider) static Cipher getInstance(String transformation, String provider) • Cipher-Objekt bekommt man durch Aufruf von getInstance() • Argumente (von Typ String) • Name eines Verschlüsselungsalgorithmus z.B. ‘‘DES‘‘ • oder dreiteiliger Name ‘‘Versclüsselungsalgorithmus/Betriebsmodus/ Ausrichtund der Daten‘‘ z.B. ‘‘DES/CBC/PKCS5Padding“ Beispiel Cipher c = Cipher.getInstance( "DES" ); Cipher c = Cipher.getInstance( " DES/CBC/PKCS5Padding " );

  7. Unterstützung • Provider „SunJCE“ unterstützt: • kryptographishen Algorithmen: • „DES“ Digital Encryption Standard • „DESede“ dreifache DES Versclüsselung • „BlowFish“ Block-Cipher-Algorithmus • PBEWithMD5AndDES, PBEWithHmacSHA1AndDESede • RC2, RC4, and RC5 • RSA • Betriebsmodi: • „ECB“ Electronic Codebook -Modus • „CBC“ Cipher Block Chaining -Modus • „CFB“ Cipher Feedback -Modus • „PCBC“ Propagating Cipher Block Chaining • „OFB“ Output Feedback -Modus • „NONE“ • Ausrichtungen: • NONE, PKCS5Padding,SSL3Padding static Cipher getInstance(String transformation) static Cipher getInstance(String transformation, Provider provider) static Cipher getInstance(String transformation, String provider) Cipher c = Cipher.getInstance( "DES" ); Cipher c = Cipher.getInstance( " DES/CBC/PKCS5Padding " );

  8. Wichtigsten Klassen • Hifsklassen • CipherInputStream CipherOutputStream • Dienen dem Cipher zum ver- und entschlüsseln von Stream-Daten TEXT CipherInputStream CipherOutputStream TEXT DATEI CODIERTE TEXT DATEI Cipher

  9. CipherOutputStream CipherInputStream KONSTRUKTOREN: protected CipherInputStream(InputStream is) CipherInputStream(InputStream is, Cipher c) METHODEN: int available() void close() boolean markSupported() int read() int read(byte[] b) int read(byte[] b, int off, int len) long skip(long n) KONSTRUKTOREN: protected CipherOutputStream(OutputStream os) CipherOutputStream(OutputStream os, Cipher c) METHODEN: void close() void flush() void write(byte[] b) void write(byte[] b, int off, int len) void write(int b) Schreiben von Daten Lesen von Daten

  10. Wichtigsten Klassen Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi • Hifsklassen • SealedObject • Dient dem Cipher-Objekt ein beliebiges serialisierbares Java-Objekt zu verschlüsseln FELDER: protected byte[] encodedParams KONSTRUKTOREN: protected SealedObject(SealedObject so) SealedObject(Serializable object, Cipher c) METHODEN: String getAlgorithm() Object getObject(Cipher c) Object getObject(Key key) Object getObject(Key key, String provider) SealedObject

  11. Weitere Klassen Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi • KeyAgreement • gibt Möglichkeit den mit einander kommunizierenden Parteien sich auf ein SecretKey zu einigen ohne dass jemand, der Kommunikation abhört, den SecretKey herausfinden kann

  12. KeyAgreement KONSTRUKTOREN: protected KeyAgreement(KeyAgreementSpi keyAgreeSpi, Provider provider, String algorithm) METHODEN: Key doPhase(Key key, boolean lastPhase) byte[] generateSecret() int generateSecret(byte[] sharedSecret, int offset) SecretKey generateSecret(String algorithm) String getAlgorithm() static KeyAgreement getInstance(String algorithm) static KeyAgreement getInstance(String algorithm, Provider provider) static KeyAgreement getInstance(String algorithm, String provider) Provider getProvider() void init(Key key) void init(Key key, AlgorithmParameterSpec params) void init(Key key, AlgorithmParameterSpec params, SecureRandom random) void init(Key key, SecureRandom random) Liefert ein vorläufiges Key-Objekt generiert SecretKey-Objekt Initialisiert KeyAgreement

  13. Weitere Klassen Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi • KeyGenerator • Ezeugt die SecretKey-Objekte, die Cipher zum Ver- und Entschlüsseln verwendet • SecretKeyFactory • chiffriert und dechiffriert SecretKey-Objekte

  14. KONSTRUKTOREN: protected SecretKeyFactory(SecretKeyFactorySpi keyFacSpi, Provider provider, String algorithm) METHODEN: SecretKey generateSecret(KeySpec keySpec) String getAlgorithm() static SecretKeyFactory getInstance(String algorithm) static SecretKeyFactory getInstance(String algorithm, Provider provider) static SecretKeyFactory getInstance(String algorithm, String provider) KeySpec getKeySpec(SecretKey key, Class keySpec) Provider getProvider() SecretKey translateKey(SecretKey key) KeyGenerator SecretKeyFactory KONSTRUKTOREN: protected KeyGenerator(KeyGeneratorSpi keyGenSpi, Provider provider, String algorithm) METHODEN: SecretKey generateKey() String getAlgorithm() static KeyGenerator getInstance(String algorithm) static KeyGenerator getInstance(String algorithm, Provider provider) static KeyGenerator getInstance(String algorithm, String provider) Provider getProvider() void init(AlgorithmParameterSpec params) void init(AlgorithmParameterSpec params, SecureRandom random) void init(int keysize) void init(int keysize, SecureRandom random) void init(SecureRandom random)

  15. Weitere Klassen Klassen Cipher CipherInputStream CipherOutputStream CipherSpi EncryptedPrivateKeyInfo ExemptionMechanism ExemptionMechanismSpi KeyAgreement KeyAgreementSpi KeyGenerator KeyGeneratorSpi Mac MacSpi NullCipher SealedObject SecretKeyFactory SecretKeyFactorySpi • Mac • Berechnet Message Authentication Code, die Integrität der Übertragung zwischen zwei Parteien sicher stellen kann (die Parteien teilen sich ein SecretKey)

  16. Mac KONSTRUKTOREN: protected Mac(MacSpi macSpi, Provider provider, String algorithm) METHODEN: Object clone() byte[] doFinal() byte[] doFinal(byte[] input) void doFinal(byte[] output, int outOffset) String getAlgorithm() static Mac getInstance(String algorithm) static Mac getInstance(String algorithm, Provider provider) static Mac getInstance(String algorithm, String provider) int getMacLength() Provider getProvider() void init(Key key) void init(Key key, AlgorithmParameterSpec params) void reset() void update(byte input) void update(byte[] input) void update(byte[] input, int offset, int len)

  17. BEISLPIEL: Einlesen vom Daten und Verschlüsselung Einlesen vom codierten Daten,entschlüsselung und Ausgabe Hallo, das ist ein Beispieltext für den Vortrag Spezielle Packages des Java SDK (1.4) java.crypto!!!

  18. import java.io.*; import java.security.*; import javax.crypto.*; import javax.crypto.spec.*; public class crypto_ex{ public static String einlesen (String weg){ try{ String eingabe = new String(); InputStream in_stream = new FileInputStream(weg); int zeichen=in_stream.read(); while(zeichen!=-1){ eingabe += eingabe.valueOf((char)zeichen); zeichen=in_stream.read(); } in_stream.close(); return eingabe; }catch(Exception e){ System.out.println("Datei nicht gefunden!"); return ""; } } einfach Daten in ein String aus Datei einlesen

  19. z.B. einfach Key angeben public static void main( String args[] ) throws Exception{ String code_wort = "CODEWORT"; String eingabe_text = new String(); Cipher schiffr = Cipher.getInstance( "DES" ); Key schluessel = new SecretKeySpec( code_wort.getBytes(), "DES" ); schiffr.init( Cipher.ENCRYPT_MODE, schluessel ); eingabe_text = einlesen("C:/Beispiel.txt"); System.out.println("Nicht Kodiert:"); System.out.println(eingabe_text); OutputStream out = new FileOutputStream( "C:/Beispiel_Kodiert.txt" ); CipherOutputStream cod_out_stream = new CipherOutputStream( out, schiffr ); cod_out_stream.write( eingabe_text.getBytes() ); cod_out_stream.close(); eingabe_text = einlesen("C:/Beispiel_Kodiert.txt"); System.out.println("\nKodiert:"); System.out.println(eingabe_text); schiffr.init( Cipher.DECRYPT_MODE, schluessel ); try{ System.out.println("\nDekodiert:"); InputStream in = new FileInputStream( "C:/Beispiel_Kodiert.txt" ); CipherInputStream decod_stream = new CipherInputStream( in, schiffr ); int zeichen = decod_stream.read(); while(zeichen!=-1){ System.out.print((char)zeichen); zeichen=decod_stream.read(); } decod_stream.close(); }catch(Exception e){ System.out.println("Datei nicht gefunden!"); } }} Cipher-Objekt initialisieren erstellen Einen SecretKey In Verschlüsselung- Modus schalten Daten verschlüsseln und in Datei schreiben In Entschlüsselung- Modus schalten verschlüsselte Daten aus Datei Zeichenweise einlesen und entschlüsseln Ausgeben von entschlüsselten Daten

  20. Literatur: • Java Cryptographie von J. Knudsen , O‘Reilly • Angewandte Kryptographie von Bruce Schneier, Addison-Wesley • (Nicht Java-spezifisch)

More Related