Java Şifreleme - Hızlı Kılavuz
Kriptografi, bilgi güvenliği sağlayabilen bir şifreleme sistemi yapma sanatı ve bilimidir.
Kriptografi, dijital verilerin gerçek güvenliği ile ilgilenir. Temel bilgi güvenliği hizmetleri sağlayan matematiksel algoritmalara dayalı mekanizmaların tasarımını ifade eder. Kriptografiyi, güvenlik uygulamalarında farklı teknikleri içeren büyük bir araç setinin kurulması olarak düşünebilirsiniz.
Kriptanaliz nedir?
Şifreleme metnini kırma sanatı ve bilimi kriptanaliz olarak bilinir.
Kriptanaliz, kriptografinin kardeş dalıdır ve ikisi de bir arada bulunur. Kriptografik süreç, iletim veya depolama için şifre metniyle sonuçlanır. Onları kırmak amacıyla kriptografik mekanizmanın incelenmesini içerir. Kriptanaliz, yeni kriptografik tekniklerin tasarımı sırasında güvenlik güçlerini test etmek için de kullanılır.
Şifreleme İlkelleri
Kriptografi ilkelleri, bir dizi istenen güvenlik hizmetini sağlamak için seçilerek kullanılabilen Kriptografi araç ve tekniklerinden başka bir şey değildir -
- Encryption
- Hash fonksiyonları
- Mesaj Doğrulama kodları (MAC)
- Dijital imzalar
Java'da Kriptografi
Java Kriptografi Mimarisi (JCA), dijital imzalar, mesaj özetleri, sertifikalar, şifreleme, anahtar üretimi ve yönetimi ve güvenli rastgele sayı üretimi gibi modern şifreleme kavramlarını uygulamak için bir dizi API'dir.
JCA geliştiricileri kullanarak, içlerinde güvenliği entegre eden uygulamalarını oluşturabilirler.
Güvenliği karmaşık güvenlik algoritmalarına bağlı olmak yerine uygulamalarınıza entegre etmek için, gerekli hizmetler için JCA'da sağlanan ilgili API'leri kolayca arayabilirsiniz.
Karma işlevler son derece kullanışlıdır ve neredeyse tüm bilgi güvenliği uygulamalarında görünür.
Karma işlevi, sayısal bir giriş değerini başka bir sıkıştırılmış sayısal değere dönüştüren matematiksel bir işlevdir. Hash fonksiyonunun girdisi keyfi uzunluktadır ancak çıktı her zaman sabit uzunluktadır.
Karma işlevi tarafından döndürülen değerler çağrılır message digest ya da sadece hash values. Aşağıdaki resim hash fonksiyonunu göstermektedir.
Java adlı bir sınıf sağlar MessageDigestjava.security paketine aittir. Bu sınıf, rasgele uzunluktaki bir mesajı bir mesaj özetine dönüştürmek için SHA-1, SHA 256, MD5 algoritmaları gibi algoritmaları destekler.
Verilen bir mesajı bir mesaj özetine dönüştürmek için, aşağıda verilen adımları izleyin -
Adım 1: Bir MessageDigest nesnesi oluşturun
MessageDigest sınıfı, getInstance(). Bu yöntem, kullanılacak algoritmanın adını belirten bir String değişkenini kabul eder ve belirtilen algoritmayı uygulayan bir MessageDigest nesnesi döndürür.
Kullanarak MessageDigest nesnesi oluşturun getInstance() yöntemi aşağıda gösterildiği gibi.
MessageDigest md = MessageDigest.getInstance("SHA-256");
Adım 2: Verileri oluşturulan MessageDigest nesnesine aktarın
Mesaj özeti nesnesini oluşturduktan sonra, mesajı / verileri ona iletmeniz gerekir. Bunu kullanarak yapabilirsinizupdate() yöntemi MessageDigest sınıfında, bu yöntem mesajı temsil eden bir bayt dizisini kabul eder ve bunu yukarıda oluşturulan MessageDigest nesnesine ekler / iletir.
md.update(msg.getBytes());
3. Adım: Mesaj özetini oluşturun
Mesaj özetini kullanarak digest() yöntem MessageDigest sınıfı bu yöntem, geçerli nesne üzerindeki karma işlevini hesaplar ve ileti özetini bayt dizisi biçiminde döndürür.
Özet yöntemini kullanarak mesaj özetini oluşturun.
byte[] digest = md.digest();
Misal
Aşağıda, bir dosyadan verileri okuyan ve bir mesaj özeti oluşturan ve yazdıran bir örnek verilmiştir.
import java.security.MessageDigest;
import java.util.Scanner;
public class MessageDigestExample {
public static void main(String args[]) throws Exception{
//Reading data from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter the message");
String message = sc.nextLine();
//Creating the MessageDigest object
MessageDigest md = MessageDigest.getInstance("SHA-256");
//Passing data to the created MessageDigest Object
md.update(message.getBytes());
//Compute the message digest
byte[] digest = md.digest();
System.out.println(digest);
//Converting the byte array in to HexString format
StringBuffer hexString = new StringBuffer();
for (int i = 0;i<digest.length;i++) {
hexString.append(Integer.toHexString(0xFF & digest[i]));
}
System.out.println("Hex format : " + hexString.toString());
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Enter the message
Hello how are you
[B@55f96302
Hex format: 2953d33828c395aebe8225236ba4e23fa75e6f13bd881b9056a3295cbd64d3
MAC (Mesaj Akimlik doğrulama Code) algoritması, mesaj kimlik doğrulamasını sağlamak için simetrik bir anahtar şifreleme tekniğidir. MAC sürecini oluşturmak için, gönderen ve alıcı simetrik bir K anahtarını paylaşır.
Esasen, bir MAC, mesaj kimlik doğrulamasını sağlamak için bir mesajla birlikte gönderilen temel mesaj üzerinde oluşturulan şifreli bir sağlama toplamıdır.
Kimlik doğrulama için MAC kullanma süreci aşağıdaki şekilde gösterilmektedir -
Java'da Mac sınıfı javax.cryptopaketi, mesaj kimlik doğrulama kodunun işlevselliğini sağlar. Bu sınıfı kullanarak ileti doğrulama kodu oluşturmak için aşağıda verilen adımları izleyin.
Adım 1: Bir KeyGenerator nesnesi oluşturun
KeyGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve bir KeyGenerator gizli anahtarlar oluşturan nesne.
Oluşturmak KeyGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
Adım 2: SecureRandom nesnesi oluşturun
SecureRandom sınıfı java.Securitypaketi, Java'da rasgele sayılar üretmek için kullanılan güçlü bir rasgele sayı üreteci sağlar. Bu sınıfı aşağıda gösterildiği gibi örnekleyin.
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
3. Adım: KeyGenerator'ü başlatın
KeyGenerator sınıf adlı bir yöntem sağlar init() bu yöntem kabul eder SecureRandom nesneyi ve akımı başlatır KeyGenerator.
Bu yöntemi kullanarak önceki adımda oluşturulan KeyGenerator nesnesini başlatın.
//Initializing the KeyGenerator
keyGen.init(secRandom);
4. Adım: Anahtar oluşturun
Kullanarak anahtar oluştur generateKey() yöntemi KeyGenerator aşağıda gösterildiği gibi sınıf.
//Creating/Generating a key
Key key = keyGen.generateKey();
Adım 5: Mac nesnesini başlatın
init() Mac sınıfının yöntemi bir Key nesnesini kabul eder ve verilen anahtarı kullanarak geçerli Mac nesnesini başlatır.
//Initializing the Mac object
mac.init(key);
6. Adım: Mac işlemini tamamlayın
doFinal()Mac sınıfının yöntemi, Mac işlemini bitirmek için kullanılır. Gerekli verileri bayt dizisi şeklinde bu yönteme iletin ve aşağıda gösterildiği gibi işlemi tamamlayın.
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
Misal
Aşağıdaki örnek, JCA kullanılarak İleti Kimlik Doğrulama Kodunun (MAC) oluşturulmasını gösterir. Burada, basit bir "Merhaba nasılsın" mesajı alıyoruz ve bu mesaj için bir Mac oluşturuyoruz.
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
public class MacSample {
public static void main(String args[]) throws Exception{
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
//Initializing the KeyGenerator
keyGen.init(secRandom);
//Creating/Generating a key
Key key = keyGen.generateKey();
//Creating a Mac object
Mac mac = Mac.getInstance("HmacSHA256");
//Initializing the Mac object
mac.init(key);
//Computing the Mac
String msg = new String("Hi how are you");
byte[] bytes = msg.getBytes();
byte[] macResult = mac.doFinal(bytes);
System.out.println("Mac result:");
System.out.println(new String(macResult));
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretecektir -
Mac result:
HÖ„^ǃÎ_Utbh…?š_üzØSSÜh_ž_œa0ŽV?
Bir şifreleme sistemi, bilgi güvenliği hizmetleri sağlamak için şifreleme tekniklerinin ve bunlara eşlik eden altyapının bir uygulamasıdır. Bir şifreleme sistemine aynı zamandacipher system.
Temel bir şifreleme sisteminin çeşitli bileşenleri şunlardır: Plaintext, Encryption Algorithm, Ciphertext, Decryption Algorithm, Şifreleme Anahtarı ve Şifre Çözme Anahtarı.
Nerede,
Encryption Keygönderen tarafından bilinen bir değerdir. Gönderen, şifreleme metnini hesaplamak için şifreleme anahtarını şifreleme algoritmasına düz metinle birlikte girer.
Decryption Keyalıcı tarafından bilinen bir değerdir. Şifre çözme anahtarı, şifreleme anahtarıyla ilgilidir, ancak her zaman onunla aynı değildir. Alıcı, düz metni hesaplamak için şifre çözme anahtarını şifre metni ile birlikte şifre çözme algoritmasına girer.
Temel olarak, şifreleme-şifre çözme algoritmalarının türüne bağlı olarak iki tür anahtar / şifreleme sistemi vardır.
Simetrik Anahtar Şifreleme
Şifreleme işlemi nerede same keys are used for encrypting and decrypting bilgiler Simetrik Anahtar Şifreleme olarak bilinir.
Simetrik şifreleme sistemlerinin çalışmasına şu şekilde atıfta bulunulur: symmetric cryptography. Simetrik şifreleme sistemleri bazen şu şekilde anılır:secret key cryptosystems.
Aşağıda, simetrik anahtar şifrelemenin birkaç yaygın örneği verilmiştir -
- Dijital Şifreleme Standardı (DES)
- Üçlü DES (3DES)
- IDEA
- BLOWFISH
Asimetrik Anahtar Şifreleme
Şifreleme işlemi nerede different keys are used for encrypting and decrypting the informationAsimetrik Anahtar Şifreleme olarak bilinir. Anahtarlar farklı olsalar da matematiksel olarak ilişkilidirler ve bu nedenle şifreli metnin şifresini çözerek düz metne ulaşmak mümkündür.
Kullanılan / üretilen anahtarlar ve sertifikalar, anahtar deposu adı verilen bir veri tabanında saklanır. Varsayılan olarak bu veritabanı, adında bir dosyada saklanır..keystore.
Bu veritabanının içeriğine, KeyStore sınıfı java.securitypaketi. Bu, PrivateKeyEntry, SecretKeyEntry, TrustedCertificateEntry olmak üzere üç farklı girişi yönetir.
- PrivateKeyEntry
- SecretKeyEntry
- TrustedCertificateEntry
Anahtar deposunda bir Anahtar saklama
Bu bölümde, bir anahtar deposunda bir anahtarın nasıl saklanacağını öğreneceğiz. Anahtar deposunda bir anahtar saklamak için aşağıda verilen adımları izleyin.
1. Adım: Bir KeyStore nesnesi oluşturun
getInstance() yöntemi KeyStore sınıfı java.security paket, anahtar deposu türünü temsil eden bir dize değerini kabul eder ve bir KeyStore nesnesi döndürür.
Kullanarak KeyStore sınıfının bir nesnesini oluşturun. getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
2. Adım: KeyStore nesnesini yükleyin
load() KeyStore sınıfının yöntemi, anahtar deposu dosyasını temsil eden bir FileInputStream nesnesini ve KeyStore şifresini belirten bir String parametresini kabul eder.
Genel olarak, Anahtar Deposu adlı dosyada saklanır cacerts, konumda C:/Program Files/Java/jre1.8.0_101/lib/security/ ve varsayılan şifresi changeit, kullanarak yükleyin load() yöntemi aşağıda gösterildiği gibi.
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
3. Adım: KeyStore.ProtectionParameter nesnesini oluşturun
KeyStore.ProtectionParameter öğesini aşağıda gösterildiği gibi örnekleyin.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Adım 4: Bir SecretKey nesnesi oluşturun
Oluştur SecretKey (arabirim) nesnesi, Sub sınıfını başlatarak SecretKeySpec. Örnek oluştururken, aşağıda gösterildiği gibi yapıcısına parametre olarak şifre ve algoritma geçirmeniz gerekir.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Adım 5: Bir SecretKeyEntry nesnesi oluşturun
Bir nesneyi oluşturun SecretKeyEntry sınıfı geçerek SecretKey yukarıdaki adımda oluşturulan nesne aşağıda gösterildiği gibi.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
6. Adım: KeyStore'a bir giriş ayarlayın
setEntry() yöntemi KeyStore sınıfı, anahtar deposu giriş diğer adını temsil eden bir String parametresi kabul eder, bir SecretKeyEntry nesne, bir ProtectionParameter nesnesi ve girişi verilen diğer ad altında depolar.
Girişi kullanarak anahtar deposu için ayarlayın. setEntry() yöntemi aşağıda gösterildiği gibi.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Example
Aşağıdaki örnek, anahtarları "cacerts" dosyasında (Windows 10 işletim sistemi) bulunan anahtar deposunda saklar.
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class StoringIntoKeyStore{
public static void main(String args[]) throws Exception {
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
//Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, password);
System.out.println("data stored");
}
}
Output
Yukarıdaki program aşağıdaki çıktıyı üretir -
System.out.println("data stored");
Bu bölümde, Java Cryptography kullanarak anahtar deposundan bir anahtarın nasıl alınacağını öğreneceğiz.
Anahtar deposundan bir anahtar almak için aşağıda verilen adımları izleyin.
1. Adım: Bir KeyStore nesnesi oluşturun
getInstance() yöntemi KeyStore sınıfı java.security paket, anahtar deposu türünü temsil eden bir dize değerini kabul eder ve bir KeyStore nesnesi döndürür.
Aşağıda gösterildiği gibi bu yöntemi kullanarak KeyStore sınıfının bir nesnesini oluşturun.
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
2. Adım: KeyStore nesnesini yükleyin
load() KeyStore sınıfının yöntemi bir FileInputStream anahtar deposu dosyasını temsil eden nesne ve KeyStore şifresini belirten bir String parametresi.
Genel olarak, Anahtar Deposu adlı dosyada saklanır cacerts, konumda C:/Program Files/Java/jre1.8.0_101/lib/security/ ve varsayılan şifresi changeit, kullanarak yükleyin load() yöntemi aşağıda gösterildiği gibi.
//Loading the KeyStore object
char[] password = "changeit".toCharArray();
String path = "C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts";
java.io.FileInputStream fis = new FileInputStream(path);
keyStore.load(fis, password);
3. Adım: KeyStore.ProtectionParameter nesnesini oluşturun
KeyStore.ProtectionParameter öğesini aşağıda gösterildiği gibi örnekleyin.
//Creating the KeyStore.ProtectionParameter object
KeyStore.ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
Adım 4: Bir SecretKey nesnesi oluşturun
Oluştur SecretKey (arabirim) nesnesi, Sub sınıfını başlatarak SecretKeySpec. Örnek oluştururken, aşağıda gösterildiği gibi yapıcısına parametre olarak şifre ve algoritma geçirmeniz gerekir.
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec(new String(keyPassword).getBytes(), "DSA");
Adım 5: Bir SecretKeyEntry nesnesi oluşturun
Bir nesneyi oluşturun SecretKeyEntry sınıfı geçerek SecretKey yukarıdaki adımda oluşturulan nesne aşağıda gösterildiği gibi.
//Creating SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEntry = new KeyStore.SecretKeyEntry(mySecretKey);
6.Adım: KeyStore'a bir giriş ayarlayın
setEntry() yöntemi KeyStore sınıfı, anahtar deposu giriş diğer adını temsil eden bir String parametresi kabul eder, bir SecretKeyEntry nesne, bir ProtectionParameter nesnesi ve girişi verilen diğer ad altında depolar.
Girişi kullanarak anahtar deposu için ayarlayın. setEntry() yöntemi aşağıda gösterildiği gibi.
//Set the entry to the keystore
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
Adım 7: KeyStore.SecretKeyEntry nesnesini oluşturun
getEntry() KeyStore sınıfının yöntemi, bir diğer adı (String parametresi) ve ProtectionParameter sınıfının bir nesnesini parametre olarak kabul eder ve bir KeyStoreEntry nesne, sonra bunu içine atabilirsiniz KeyStore.SecretKeyEntry nesne.
Gerekli anahtar ve önceki adımlarda oluşturulan koruma parametresi nesnesi için takma adı ileterek KeyStore.SecretKeyEntry sınıfının bir nesnesini oluşturun. getEntry() yöntemi aşağıda gösterildiği gibi.
//Creating the KeyStore.SecretKeyEntry object
KeyStore.SecretKeyEntry secretKeyEnt = (KeyStore.SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
Adım 8: Alınan girişin anahtar nesnesini oluşturun
getSecretKey() yöntemi SecretKeyEntryclass bir SecretKey nesnesi döndürür. Bu yöntemi kullanarak aşağıda gösterildiği gibi bir SecretKey nesnesi oluşturun.
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println(mysecretKey);
Misal
Aşağıdaki örnek, bir anahtar deposundan anahtarların nasıl alınacağını gösterir. Burada, "cacerts" dosyasında (Windows 10 işletim sistemi) bulunan bir anahtar deposunda bir anahtar saklıyoruz, onu alıyor ve anahtarı oluşturmak için kullanılan algoritma ve formatı gibi bazı özelliklerini görüntülüyoruz. alınan anahtar.
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.KeyStore.ProtectionParameter;
import java.security.KeyStore.SecretKeyEntry;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class RetrievingFromKeyStore{
public static void main(String args[]) throws Exception{
//Creating the KeyStore object
KeyStore keyStore = KeyStore.getInstance("JCEKS");
//Loading the the KeyStore object
char[] password = "changeit".toCharArray();
java.io.FileInputStream fis = new FileInputStream(
"C:/Program Files/Java/jre1.8.0_101/lib/security/cacerts");
keyStore.load(fis, password);
//Creating the KeyStore.ProtectionParameter object
ProtectionParameter protectionParam = new KeyStore.PasswordProtection(password);
//Creating SecretKey object
SecretKey mySecretKey = new SecretKeySpec("myPassword".getBytes(), "DSA");
//Creating SecretKeyEntry object
SecretKeyEntry secretKeyEntry = new SecretKeyEntry(mySecretKey);
keyStore.setEntry("secretKeyAlias", secretKeyEntry, protectionParam);
//Storing the KeyStore object
java.io.FileOutputStream fos = null;
fos = new java.io.FileOutputStream("newKeyStoreName");
keyStore.store(fos, password);
//Creating the KeyStore.SecretKeyEntry object
SecretKeyEntry secretKeyEnt = (SecretKeyEntry)keyStore.getEntry("secretKeyAlias", protectionParam);
//Creating SecretKey object
SecretKey mysecretKey = secretKeyEnt.getSecretKey();
System.out.println("Algorithm used to generate key : "+mysecretKey.getAlgorithm());
System.out.println("Format used for the key: "+mysecretKey.getFormat());
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Algorithm used to generate key: DSA
Format of the key: RAW
Java sağlar KeyGenerator sınıf, bu sınıf gizli anahtarlar oluşturmak için kullanılır ve bu sınıfın nesneleri yeniden kullanılabilir.
KeyGenerator sınıfını kullanarak anahtarlar oluşturmak için aşağıda verilen adımları izleyin.
Adım 1: Bir KeyGenerator nesnesi oluşturun
KeyGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve gizli anahtarlar oluşturan bir KeyGenerator nesnesi döndüren yöntem.
Oluşturmak KeyGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
Adım 2: SecureRandom nesnesi oluşturun
SecureRandom sınıfı java.Securitypaketi, Java'da rasgele sayılar üretmek için kullanılan güçlü bir rasgele sayı üreteci sağlar. Bu sınıfı aşağıda gösterildiği gibi örnekleyin.
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
3. Adım: KeyGenerator'ü başlatın
KeyGenerator sınıf adlı bir yöntem sağlar init() bu yöntem SecureRandom nesnesini kabul eder ve mevcut KeyGenerator.
Önceki adımda oluşturulan KeyGenerator nesnesini init() yöntem.
//Initializing the KeyGenerator
keyGen.init(secRandom);
Misal
Aşağıdaki örnek, anahtarın KeyGenerator sınıfını kullanarak gizli anahtarın anahtar üretimini gösterir. javax.crypto paketi.
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import java.security.Key;
import java.security.SecureRandom;
public class KeyGeneratorExample {
public static void main(String args[]) throws Exception{
//Creating a KeyGenerator object
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
//Creating a SecureRandom object
SecureRandom secRandom = new SecureRandom();
//Initializing the KeyGenerator
keyGen.init(secRandom);
//Creating/Generating a key
Key key = keyGen.generateKey();
System.out.println(key);
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(cipher.ENCRYPT_MODE, key);
String msg = new String("Hi how are you");
byte[] bytes = cipher.doFinal(msg.getBytes());
System.out.println(bytes);
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
com.sun.crypto.provider.DESKey@18629
[B@2ac1fdc4
Java, KeyPairGeneratorsınıf. Bu sınıf, genel ve özel anahtar çiftleri oluşturmak için kullanılır. Kullanarak anahtarlar oluşturmak içinKeyPairGenerator sınıf, aşağıda verilen adımları izleyin.
Adım 1: Bir KeyPairGenerator nesnesi oluşturun
KeyPairGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve anahtarları oluşturan bir KeyPairGenerator nesnesi döndüren yöntem.
Oluşturmak KeyPairGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Adım 2: KeyPairGenerator nesnesini başlatın
KeyPairGenerator sınıf adlı bir yöntem sağlar initialize()bu yöntem, anahtar çifti üretecini başlatmak için kullanılır. Bu yöntem, anahtar boyutunu temsil eden bir tamsayı değerini kabul eder.
Aşağıda gösterildiği gibi bu yöntemi kullanarak önceki adımda oluşturulan KeyPairGenerator nesnesini başlatın.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
3. Adım: KeyPairGenerator'ü oluşturun
Sen üretebilirsin KeyPair kullanmak generateKeyPair() yöntemi KeyPairGeneratorsınıf. Aşağıda gösterildiği gibi bu yöntemi kullanarak anahtar çiftini oluşturun.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
4. Adım: Özel anahtarı / genel anahtarı alın
Özel anahtarı, oluşturulan KeyPair nesnesinden, getPrivate() yöntemi aşağıda gösterildiği gibi.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Ortak anahtarı, oluşturulan KeyPair nesnesinden, getPublic() yöntemi aşağıda gösterildiği gibi.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
Misal
Aşağıdaki örnek, anahtarın KeyPairGenerator sınıfı kullanılarak gizli anahtarın anahtar üretimini gösterir. javax.crypto paketi.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
public class KeyPairGenertor {
public static void main(String args[]) throws Exception{
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
//Generating the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
System.out.println("Keys generated");
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Keys generated
Dijital imzalar, yazarı, imzaların tarihini ve saatini doğrulamamıza, mesaj içeriğini doğrulamamıza izin verir. Ayrıca, ek özellikler için kimlik doğrulama işlevi içerir.
Dijital imzanın avantajları
Bu bölümde dijital imza kullanımını gerektiren farklı nedenleri öğreneceğiz. İletişime dijital imzalar uygulamak için birkaç neden vardır -
Doğrulama
Dijital imzalar, mesaj kaynaklarının doğrulanmasına yardımcı olur. Örneğin, bir bankanın şubesi merkez ofise bir hesap bakiyesinde değişiklik talep eden bir mesaj gönderirse. Merkez ofis bu mesajın yetkili bir kaynaktan gönderildiğini doğrulayamazsa, bu tür bir talebin yerine getirilmesi büyük bir hata olabilir.
Bütünlük
Mesaj imzalandıktan sonra, mesajdaki herhangi bir değişiklik imzayı geçersiz kılar.
Reddetmeme
Bu özellik sayesinde, bazı bilgileri imzalayan herhangi bir kuruluş, daha sonra bu bilgileri imzaladığını reddedemez.
Dijital imzayı yaratmak
Şimdi nasıl dijital imza oluşturacağımızı öğrenelim. Aşağıda verilen adımları izleyerek Java kullanarak dijital imza oluşturabilirsiniz.
Adım 1: Bir KeyPairGenerator nesnesi oluşturun
KeyPairGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve anahtarları oluşturan bir KeyPairGenerator nesnesi döndüren yöntem.
Oluşturmak KeyPairGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Adım 2: KeyPairGenerator nesnesini başlatın
KeyPairGenerator sınıf adlı bir yöntem sağlar initialize()bu yöntem, anahtar çifti üretecini başlatmak için kullanılır. Bu yöntem, anahtar boyutunu temsil eden bir tamsayı değerini kabul eder.
Önceki adımda oluşturulan KeyPairGenerator nesnesini initialize() yöntemi aşağıda gösterildiği gibi.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
3. Adım: KeyPairGenerator'ü oluşturun
Sen üretebilirsin KeyPair kullanmak generateKeyPair()yöntem. Anahtar çiftini kullanarakgenerateKeyPair() yöntemi aşağıda gösterildiği gibi.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
4. Adım: Çiftten özel anahtarı alın
Özel anahtarı, oluşturulan KeyPair nesnesinden, getPrivate() yöntem.
Özel anahtarı kullanarak getPrivate() yöntemi aşağıda gösterildiği gibi.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Adım 5: Bir imza nesnesi oluşturun
getInstance() yöntemi Signature class, gerekli imza algoritmasını temsil eden bir dize parametresini kabul eder ve ilgili Signature nesnesini döndürür.
Signature sınıfının bir nesnesini, getInstance() yöntem.
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
6. Adım: İmza nesnesini başlatın
initSign() Signature sınıfının yöntemi bir PrivateKey nesnesini oluşturur ve geçerli İmza nesnesini başlatır.
Önceki adımda oluşturulan İmza nesnesini initSign() yöntemi aşağıda gösterildiği gibi.
//Initialize the signature
sign.initSign(privKey);
7. Adım: Signature nesnesine veri ekleyin
update() Signature sınıfının yöntemi, imzalanacak veya doğrulanacak verileri temsil eden bir bayt dizisini kabul eder ve mevcut nesneyi verilen verilerle günceller.
İmzalanacak verileri şu adrese ileterek başlatılmış İmza nesnesini güncelleyin. update() yöntemi aşağıda gösterildiği gibi bayt dizisi biçiminde.
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
8. Adım: İmzayı Hesaplayın
sign() yöntemi Signature class, güncellenen verilerin imza baytlarını döndürür.
İmzayı kullanarak hesaplayın. sign() yöntemi aşağıda gösterildiği gibi.
//Calculating the signature
byte[] signature = sign.sign();
Example
Aşağıdaki Java programı, kullanıcıdan gelen bir mesajı kabul eder ve verilen mesaj için dijital bir imza oluşturur.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Scanner;
public class CreatingDigitalSignature {
public static void main(String args[]) throws Exception {
//Accepting text from user
Scanner sc = new Scanner(System.in);
System.out.println("Enter some text");
String msg = sc.nextLine();
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
//Initialize the signature
sign.initSign(privKey);
byte[] bytes = "msg".getBytes();
//Adding data to the signature
sign.update(bytes);
//Calculating the signature
byte[] signature = sign.sign();
//Printing the signature
System.out.println("Digital signature for given text: "+new String(signature, "UTF8"));
}
}
Output
Yukarıdaki program aşağıdaki çıktıyı üretir -
Enter some text
Hi how are you
Digital signature for given text: 0=@gRD???-?.???? /yGL?i??a!?
Java kullanarak dijital imza oluşturabilir ve aşağıda verilen adımları izleyerek doğrulayabilirsiniz.
Adım 1: Bir KeyPairGenerator nesnesi oluşturun
KeyPairGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve anahtarları oluşturan bir KeyPairGenerator nesnesi döndüren yöntem.
Oluşturmak KeyPairGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Adım 2: KeyPairGenerator nesnesini başlatın
KeyPairGenerator sınıf adlı bir yöntem sağlar initialize()yöntem. Bu yöntem, anahtar çifti üretecini başlatmak için kullanılır. Bu yöntem, anahtar boyutunu temsil eden bir tamsayı değerini kabul eder.
Önceki adımda oluşturulan KeyPairGenerator nesnesini initialize() yöntemi aşağıda gösterildiği gibi.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
3. Adım: KeyPairGenerator'ü oluşturun
Sen üretebilirsin KeyPair kullanmak generateKeyPair()yöntem. Aşağıda gösterildiği gibi bu yöntemi kullanarak anahtar çiftini oluşturun.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
4. Adım: Çiftten özel anahtarı alın
Özel anahtarı, oluşturulan KeyPair nesnesinden, getPrivate() yöntem.
Özel anahtarı kullanarak getPrivate() yöntemi aşağıda gösterildiği gibi.
//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();
Adım 5: Bir imza nesnesi oluşturun
getInstance() yöntemi Signature class, gerekli imza algoritmasını temsil eden bir dize parametresini kabul eder ve ilgili Signature nesnesini döndürür.
Signature sınıfının bir nesnesini, getInstance() yöntem.
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
6. Adım: İmza nesnesini başlatın
initSign() Signature sınıfının yöntemi bir PrivateKey nesnesini oluşturur ve geçerli İmza nesnesini başlatır.
Önceki adımda oluşturulan İmza nesnesini initSign() yöntemi aşağıda gösterildiği gibi.
//Initialize the signature
sign.initSign(privKey);
7. Adım: Signature nesnesine veri ekleyin
update() Signature sınıfının yöntemi, imzalanacak veya doğrulanacak verileri temsil eden bir bayt dizisini kabul eder ve mevcut nesneyi verilen verilerle günceller.
İmzalanacak verileri şu adrese ileterek başlatılmış İmza nesnesini güncelleyin. update() yöntemi aşağıda gösterildiği gibi bayt dizisi biçiminde.
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
8. Adım: İmzayı Hesaplayın
sign() yöntemi Signature class, güncellenen verilerin imza baytlarını döndürür.
Sign () yöntemini kullanarak aşağıda gösterildiği gibi İmzayı hesaplayın.
//Calculating the signature
byte[] signature = sign.sign();
Adım 9: Doğrulama için imza nesnesini başlatın
Bir İmza nesnesini doğrulamak için önce onu kullanarak başlatmanız gerekir. initVerify() yöntem BT yöntemi kabul eder PublicKey nesne.
Bu nedenle, İmza nesnesini doğrulama için initVerify() yöntemi aşağıda gösterildiği gibi.
//Initializing the signature
sign.initVerify(pair.getPublic());
10. Adım: Doğrulanacak verileri güncelleyin
Aşağıda gösterilen güncelleme yöntemini kullanarak doğrulanacak verilerle başlatılmış (doğrulama için) nesneyi güncelleyin.
//Update the data to be verified
sign.update(bytes);
11. Adım: İmzayı Doğrulayın
verify()Signature sınıfının yöntemi başka bir imza nesnesini kabul eder ve bunu mevcut olanla doğrular. Bir eşleşme olursa, doğru, aksi takdirde yanlış döndürür.
Aşağıda gösterildiği gibi bu yöntemi kullanarak imzayı doğrulayın.
//Verify the signature
boolean bool = sign.verify(signature);
Misal
Aşağıdaki Java programı, kullanıcıdan gelen bir mesajı kabul eder, verilen mesaj için dijital bir imza oluşturur ve bunu doğrular.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.Signature;
import java.util.Scanner;
public class SignatureVerification {
public static void main(String args[]) throws Exception{
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the privatekey from the key pair
PrivateKey privKey = pair.getPrivate();
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");
//Initializing the signature
sign.initSign(privKey);
byte[] bytes = "Hello how are you".getBytes();
//Adding data to the signature
sign.update(bytes);
//Calculating the signature
byte[] signature = sign.sign();
//Initializing the signature
sign.initVerify(pair.getPublic());
sign.update(bytes);
//Verifying the signature
boolean bool = sign.verify(signature);
if(bool) {
System.out.println("Signature verified");
} else {
System.out.println("Signature failed");
}
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Signature verified
Verilen verileri, Cipher sınıfını kullanarak şifreleyebilirsiniz. javax.cryptopaketi. Java kullanarak verilen verileri şifrelemek için aşağıdaki adımları izleyin.
Adım 1: Bir KeyPairGenerator nesnesi oluşturun
KeyPairGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve anahtarları oluşturan bir KeyPairGenerator nesnesi döndüren yöntem.
Oluşturmak KeyPairGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Adım 2: KeyPairGenerator nesnesini başlatın
KeyPairGenerator sınıf adlı bir yöntem sağlar initialize()bu yöntem, anahtar çifti üretecini başlatmak için kullanılır. Bu yöntem, anahtar boyutunu temsil eden bir tamsayı değerini kabul eder.
Önceki adımda oluşturulan KeyPairGenerator nesnesini initialize() yöntemi aşağıda gösterildiği gibi.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
3. Adım: KeyPairGenerator'ü oluşturun
Sen üretebilirsin KeyPair kullanmak generateKeyPair() yöntemi KeyPairGeneratorsınıf. Aşağıda gösterildiği gibi bu yöntemi kullanarak anahtar çiftini oluşturun.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
4. Adım: Genel anahtarı alın
Genel anahtarı oluşturulan KeyPair kullanarak nesne getPublic() yöntemi aşağıda gösterildiği gibi.
Aşağıda gösterildiği gibi bu yöntemi kullanarak genel anahtarı alın.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
5. Adım: Bir Cipher nesnesi oluşturun
getInstance() yöntemi Cipher class, gerekli dönüşümü temsil eden bir String değişkenini kabul eder ve verilen dönüşümü uygulayan bir Cipher nesnesi döndürür.
Cipher nesnesini oluşturun. getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Adım 6: Cipher nesnesini başlatın
init() yöntemi Cipher sınıfı, iki parametreyi, işlem modunu (şifreleme / şifre çözme) temsil eden bir tamsayı parametresi ve genel anahtarı temsil eden bir Anahtar nesnesi kabul eder.
Cypher nesnesini şu şekilde başlatın: init() yöntemi aşağıda gösterildiği gibi.
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
7. Adım: Cipher nesnesine veri ekleyin
update() Cipher sınıfının yöntemi, şifrelenecek veriyi temsil eden bir bayt dizisini kabul eder ve mevcut nesneyi verilen verilerle günceller.
Verileri, başlatılan Cipher nesnesini update() yöntemi aşağıda gösterildiği gibi bayt dizisi biçiminde.
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
8. Adım: Verileri şifreleyin
doFinal()Cipher sınıfının yöntemi şifreleme işlemini tamamlar. Bu nedenle, aşağıda gösterildiği gibi bu yöntemi kullanarak şifrelemeyi bitirin.
//Encrypting the data
byte[] cipherText = cipher.doFinal();
Misal
Aşağıdaki Java programı kullanıcıdan gelen metni kabul eder, RSA algoritmasını kullanarak şifreler ve verilen metnin şifreli formatını yazdırır.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
public class CipherSample {
public static void main(String args[]) throws Exception{
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withRSA");
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generating the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, pair.getPublic());
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
//encrypting the data
byte[] cipherText = cipher.doFinal();
System.out.println(new String(cipherText, "UTF8"));
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Encrypted Text:
"???:]J_?]???;Xl??????*@??u???r??=T&???_?_??.??i?????(?$_f?zD??????ZGH??g??? g?E:_??bz^??f?~o???t?}??u=uzp\UI????Z??l[?G?3??Y?UAEfKT?f?O??N_?d__?????a_?15%?^? 'p?_?$,9"{??^??y??_?t???,?W?PCW??~??[?$??????e????f?Y-Zi__??_??w?_?&QT??`?`~?[?K_??_???
Şifrelenmiş verilerin şifresini, cihazın Cipher sınıfını kullanarak javax.cryptopaketi. Java kullanarak verilen verilerin şifresini çözmek için aşağıdaki adımları izleyin.
Adım 1: Bir KeyPairGenerator nesnesi oluşturun
KeyPairGenerator sınıf sağlar getInstance() gerekli anahtar oluşturma algoritmasını temsil eden bir String değişkenini kabul eden ve anahtarları oluşturan bir KeyPairGenerator nesnesi döndüren yöntem.
Oluşturmak KeyPairGenerator kullanarak nesne getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");
Adım 2: KeyPairGenerator nesnesini başlatın
KeyPairGenerator sınıf adlı bir yöntem sağlar initialize()bu yöntem, anahtar çifti üretecini başlatmak için kullanılır. Bu yöntem, anahtar boyutunu temsil eden bir tamsayı değerini kabul eder.
Önceki adımda oluşturulan KeyPairGenerator nesnesini initialize() yöntemi aşağıda gösterildiği gibi.
//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);
3. Adım: KeyPairGenerator'ü oluşturun
Sen üretebilirsin KeyPair kullanmak generateKeyPair() yöntemi KeyPairGeneratorsınıf. Aşağıda gösterildiği gibi bu yöntemi kullanarak anahtar çiftini oluşturun.
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
4. Adım: Genel anahtarı alın
Ortak anahtarı, oluşturulan KeyPair nesnesinden, getPublic() yöntemi aşağıda gösterildiği gibi.
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
5. Adım: Bir Cipher nesnesi oluşturun
getInstance() yöntemi Cipher class, gerekli dönüşümü temsil eden bir String değişkenini kabul eder ve verilen dönüşümü uygulayan bir Cipher nesnesi döndürür.
Cipher nesnesini oluşturun. getInstance() yöntemi aşağıda gösterildiği gibi.
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
Adım 6: Cipher nesnesini başlatın
init() Cipher sınıfının yöntemi iki parametre kabul eder
- İşlem modunu temsil eden bir tamsayı parametresi (şifreleme / şifre çözme)
- Genel anahtarı temsil eden anahtar nesne
Cypher nesnesini şu şekilde başlatın: init() yöntemi aşağıda gösterildiği gibi.
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
7. Adım: Cipher nesnesine veri ekleyin
update() Cipher sınıfının yöntemi, şifrelenecek veriyi temsil eden bir bayt dizisini kabul eder ve mevcut nesneyi verilen verilerle günceller.
Verileri, başlatılan Cipher nesnesini update() yöntemi aşağıda gösterildiği gibi bayt dizisi biçiminde.
//Adding data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
8. Adım: Verileri şifreleyin
doFinal()Cipher sınıfının yöntemi şifreleme işlemini tamamlar. Bu nedenle, aşağıda gösterildiği gibi bu yöntemi kullanarak şifrelemeyi bitirin.
//Encrypting the data
byte[] cipherText = cipher.doFinal();
Adım 9: Şifre çözme için Cipher nesnesini başlatın
Önceki adımlarda şifrelenen şifreyi çözmek için şifre çözme için onu başlatmanız gerekir.
Bu nedenle, aşağıda gösterildiği gibi Cipher.DECRYPT_MODE ve PrivateKey nesnesi parametrelerini ileterek şifre nesnesini başlatın.
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
Adım 10: Verilerin şifresini çözün
Son olarak, şifrelenmiş metnin şifresini çözmek için doFinal() yöntemi aşağıda gösterildiği gibi.
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
Misal
Aşağıdaki Java programı kullanıcıdan gelen metni kabul eder, RSA algoritmasını kullanarak şifreler ve verilen metnin şifresini yazar, şifresini çözer ve şifresi çözülen metni tekrar yazdırır.
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.Signature;
import javax.crypto.Cipher;
public class CipherDecrypt {
public static void main(String args[]) throws Exception{
//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withRSA");
//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
//Initializing the key pair generator
keyPairGen.initialize(2048);
//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();
//Getting the public key from the key pair
PublicKey publicKey = pair.getPublic();
//Creating a Cipher object
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
//Initializing a Cipher object
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
//Add data to the cipher
byte[] input = "Welcome to Tutorialspoint".getBytes();
cipher.update(input);
//encrypting the data
byte[] cipherText = cipher.doFinal();
System.out.println( new String(cipherText, "UTF8"));
//Initializing the same cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());
//Decrypting the text
byte[] decipheredText = cipher.doFinal(cipherText);
System.out.println(new String(decipheredText));
}
}
Çıktı
Yukarıdaki program aşağıdaki çıktıyı üretir -
Encrypted Text:
]/[?F3?D?p
v?w?!?H???^?A??????P?u??FA?
?
???_?? ???_jMH-??>??OP?'?j?_?n`
?_??'`????o??_GL??g???g_f?????f|???LT?|?Vz_TDu#??\?<b,,?$C2???Bq?#?lDB`??g,^??K?_?v???`}
?;LX?a?_5e???#???_?6?/B&B_???^?__Ap^#_?q?IEh????_?,??*??]~_?_?D?
_y???lp??a?P_U{
Decrypted Text:
Welcome to Tutorialspoint