Verschlüsselung mit Java wird per default über die Java Cryptography Extension [JCE] abgewickelt. Im wesentlichen gilt es die Daten so zu codieren, dass nur der Empfänger diese in angemessener Zeit lesbar machen kann. Die JCE bietet das Framework hierfür und ist in Java 1.4 bereits enthalten. Zudem enthält das J2SDK 1.4 + auch eine Implementierung hierfür, in welcher Sun einige Standardmechanismen "provided".
Um eine Ver- bzw. Entschlüsselung durchzuführen müssen wir,
all rights reserved © Bastie - Sebastian Ritter @: w³: http://www.Bastie.depackagede.bastie.howto;importjavax.crypto.*;importjavax.crypto.spec.*;public classVerschluesselnMitJava {final private transient staticString password = "jeLaengerJeBesserPasswort";final private transient byte[] salt = { (byte) 0xc9, (byte) 0xc9,(byte) 0xc9,(byte) 0xc9,(byte) 0xc9,(byte) 0xc9,(byte) 0xc9,(byte) 0xc9};final intiterations =3;protectedVerschluesselnMitJava() {// java.security.Security.addProvider(new com.sun.crypto.provider.SunJCE()); // implizit bereits erledigt!}/** instance */private staticVerschluesselnMitJava instance;/** Singleton Factory * @return instance */public staticVerschluesselnMitJava getInstance () {if(instance ==null) { instance =newVerschluesselnMitJava (); }returninstance; }/** Notwendige Instanczen */privateCipher encryptCipher;privateCipher decryptCipher;privatesun.misc.BASE64Encoder encoder =newsun.misc.BASE64Encoder();privatesun.misc.BASE64Decoder decoder =newsun.misc.BASE64Decoder();/** Verwendete Zeichendecodierung */privateString charset = "UTF16";/** * Initialisiert den Verschlüsselungsmechanismus * @param pass char[] * @param salt byte[] * @param iterations int * @throws SecurityException */public voidinit (final char[] pass,final byte[]salt,final intiterations)throwsSecurityException {try{finalPBEParameterSpec ps =newPBEParameterSpec(salt,20);finalSecretKeyFactory kf = SecretKeyFactory.getInstance("PBEWithMD5AndDES");finalSecretKey k = kf.generateSecret(newPBEKeySpec(pass)); encryptCipher = Cipher.getInstance("PBEWithMD5AndDES/CBC/PKCS5Padding"); encryptCipher.init (Cipher.ENCRYPT_MODE, k, ps); decryptCipher = Cipher.getInstance("PBEWithMD5AndDES/CBC/PKCS5Padding"); decryptCipher.init (Cipher.DECRYPT_MODE, k, ps); }catch(Exception e) {throw newSecurityException("Could not initialize CryptoLibrary:" + e.getMessage()); } }/** * Verschlüsselt eine Zeichenkette * * @param str Description of the Parameter * @return String the encrypted string. * @exception SecurityException Description of the Exception */public synchronizedString encrypt(String str)throwsSecurityException {try{byte[] b = str.getBytes(this.charset);byte[] enc = encryptCipher.doFinal(b);returnencoder.encode(enc); }catch(Exception e){throw newSecurityException("Could not encrypt:" + e.getMessage()); } }/** * Entschlüsselt eine Zeichenkette, welche mit der Methode encrypt * verschlüsselt wurde. * * @param str Description of the Parameter * @return String the encrypted string. * @exception SecurityException Description of the Exception */public synchronizedString decrypt(String str)throwsSecurityException {try{byte[] dec = decoder.decodeBuffer(str);byte[] b = decryptCipher.doFinal(dec);return newString(b,this.charset); }catch(Exception e) {throw newSecurityException("Could not decrypt:" + e.getMessage()); } }public static voidmain (finalString [] ignored) { VerschluesselnMitJava man = VerschluesselnMitJava.getInstance(); man.init(man.password.toCharArray(), man.salt, man.iterations);finalString encrypted = man.encrypt("Bastie"); System.out.println ("Verschlüsselt :"+encrypted);finalString decrypted = man.decrypt (encrypted); System.out.println("Entschlüsselt :"+decrypted); } }