_ 4.1.1 Kryptering/dekryptering med symmetriska algoritmer Vi ska nu titta på kryptering/dekryptering med symmetriska algoritmer. På grund av att USA tidigare (innan version 1.4 av JDK) hade större restriktioner för export av stark kryptering så ingick inte detta i JDK utan man fick hämta paketet Java Cryptogarphy Extension (JCE) separat från länder utanför USA. Detta är anledningen till att det nu finns två paket i JDK som har med säkerhet att göra: - §java.security§ - §javax.crypto§ I den här uppgiften så ska vi kryptera och dekryptera en godtycklig fil med en symmetrisk algoritm. Detta ska vi göra utan att använda de verktyg för säkerhet som ingår i JDK (policytool, jarsigner eller keytool), vi ska programmera utifrån de API:er som finns i JDK. __ Uppgift Gör följande tre program som vid kommandoprompten startas med: - §java KeyHandler § som skapar en (hemlig) nyckel och sparar denna nyckel (okrypterad) i filen §§ - §java EncryptHandler § som krypterar filen §§ med (den hemliga) nyckeln i filen §§ och sparar det som krypterats i filen §§ - §java DecryptHandler § som dekrypterar filen §§ med (den hemliga) nyckeln i filen §§ och sparar det som dekrypterats i filen §§ Systemet ska göras utan användning av de verktyg för säkerhet som ingår i JDK. Kryptering/dekrypterings-algoritmen som ska användas ska vara så stark som möjligt och välj mellan: - Blowfish med 448 bits nyckel (om man använder en dator på DSV som inte har stöd för obegränsad kryptering/dekryptering så räcker det med en kortare nyckel, exempelvis en 32 bits nyckel) - AES (kräver JDK 1.4.2 eller senare) Man behöver inte använda klassen §KeyStore§ utan kan spara nycklarna okrypterade direkt på fil. __ Exempel Ett enkelt exempel kan köras enligt följande: = Hämta filen: §[KeyHandler.class, 05_ass/ip1/4/4.1.1/KeyHandler.class]§ = Kör programmet och gör nyckel: §java KeyHandler § = Hämta filen: §[EncryptHandler.class, 05_ass/ip1/4/4.1.1/EncryptHandler.class]§ = Hämta filen: §[data, 05_ass/ip1/4/4.1.1/data]§ = Kör programmet och kryptera: §java EncryptHandler data § = Hämta filen: §[DecryptHandler.class, 05_ass/ip1/4/4.1.1/DecryptHandler.class]§ = Kör programmet och dekryptera: §java DecryptHandler § Detta exempel använder enbart en 32-bits nyckel så att man även kan testa på datorer utan stöd för obegränsad kryptering/dekryptering. __ Tips Man bör importera följande för säkerhetsfunktionerna: § import javax.crypto.*; import javax.crypto.spec.*; import java.security.*; § Använd Objekt-strömmar vid filhanteringen av nycklar. Om man valt Blowfish så skriv §String algorithm = "Blowfish/ECB/PKCS5Padding"§ i både §EncryptHandler§ och §DecryptHandler§, se [Oracle: JavaTM Cryptography Extension (JCE) Reference Guide: Appendix A: Standard Names, http://download.oracle.com/javase/1.5.0/docs/guide/security/jce/JCERefGuide.html] för mer om detta. __ Hjälp ~ 05_ass/help/01.txt > [Klicka här för hjälp, helper.dsv@gmail.com, Prog Internet: 4.1.1 Kryptering/dekryptering med symmetriska algoritmer: http://people.dsv.su.se/~pierre/i/i.cgi?href=05_ass/ip1/4.1.1.txt] ½===system_tutoring_message===½ < ~ 05_ass/help/02.txt