Java Şifreleme - İmza Oluşturma
Dijital imzalar, yazarı, imzaların tarihini ve saatini doğrulamamıza, mesaj içeriğini doğrulamamıza izin verir. Ayrıca, ek yetenekler 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, 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.
İnkar etmeme
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!?