// Java salauksenkäyttöesimerkki SJ import javax.crypto.*; import javax.crypto.spec.*; import java.io.*; import java.lang.*; import java.util.*; import java.security.*; import java.io.Console; public class SalausEsimerkki { protected String salain = "Blowfish"; // AES, DES, Blowfish protected int avainPituus = 128; // AES, Blowfish: 128, DES: 64 public static void main(String[] args) { SalausEsimerkki s = new SalausEsimerkki(); // kutsuaksemme ei-staattisia metdeja SecretKeySpec avain = SalausApu.lueAvain(); // avain käyttäjältä String viesti = new String("Hajautetut ja samanaikaiset järjestelmät"); byte[] viestib = viesti.getBytes(); // tavuiksi System.out.println("Selväteksti=|" + viesti +"|,\n heksana|" + SalausApu.bintohex(viestib)); byte[] ct = s.salaa(viestib, avain); // itse salaus System.out.println("Salattuna:" + SalausApu.bintohex(ct)); byte[] pt = s.pura(ct, avain); // salauksen purku String purettuviesti = new String(pt); // merkkijonoksi System.out.println("Purettuna=|" + purettuviesti +"|,\n hexana|" + SalausApu.bintohex(pt)); s.soEsimerkki(avain); } // main() // esimerkki SealedObject:n käytöstä public void soEsimerkki(SecretKeySpec avain) { System.out.println("soEsimerkki"); try { // alustaan salain Cipher c = Cipher.getInstance(salain); c.init(Cipher.ENCRYPT_MODE, avain); // salataan koko olio SealedObject so = new SealedObject(new SalattavaOlio("Salainen otus"), c); // purku: // alustetaan salain c = Cipher.getInstance(salain); c.init(Cipher.DECRYPT_MODE, avain); // itse purku SalattavaOlio o = (SalattavaOlio) so.getObject(c); System.out.println(o); } catch (Exception e) { System.err.println("SealedObject-esimerkki epäonnistui: " + e); } } // salaa viestin t avaimella k public byte[] salaa(byte[] t, SecretKeySpec k) { try { Cipher c = Cipher.getInstance(salain); // valitaan salain c.init(Cipher.ENCRYPT_MODE, k); // alustus // pidempää tekstiä salataan update():lla return c.doFinal(t); // itse salaus (palauttaa tavutaulukon) } catch (Exception e) { System.err.println("Salaus epäonnistui: " + e); } return null; } // purkaa viestin t avaimella k public byte[] pura(byte[] t, SecretKeySpec k) { try { Cipher c = Cipher.getInstance(salain); c.init(Cipher.DECRYPT_MODE, k); return c.doFinal(t); } catch (Exception e) { System.err.println("Purku epäonnistui: " + e); } return null; } } // class