जावा क्रिप्टोग्राफी - हस्ताक्षर बनाना

डिजिटल हस्ताक्षर हमें लेखक, दिनांक और हस्ताक्षर के समय की पुष्टि करने, संदेश सामग्री को प्रमाणित करने की अनुमति देते हैं। इसमें अतिरिक्त क्षमताओं के लिए प्रमाणीकरण समारोह भी शामिल है।

डिजिटल हस्ताक्षर के लाभ

इस खंड में, हम उन विभिन्न कारणों के बारे में जानेंगे जो डिजिटल हस्ताक्षर के उपयोग के लिए कहते हैं। संचार के लिए डिजिटल हस्ताक्षर को लागू करने के कई कारण हैं -

प्रमाणीकरण

डिजिटल हस्ताक्षर संदेशों के स्रोतों को प्रमाणित करने में मदद करते हैं। उदाहरण के लिए, यदि किसी बैंक का शाखा कार्यालय केंद्रीय कार्यालय को एक संदेश भेजता है, तो एक खाते के शेष में परिवर्तन के लिए अनुरोध करता है। यदि केंद्रीय कार्यालय अधिकृत स्रोत से उस संदेश को प्रमाणित नहीं कर सकता है, तो ऐसे अनुरोध का अभिनय एक गंभीर गलती हो सकती है।

अखंडता

एक बार संदेश पर हस्ताक्षर करने के बाद, संदेश में कोई भी परिवर्तन हस्ताक्षर को अमान्य कर देगा।

गैर परित्याग

इस संपत्ति के द्वारा, किसी भी संस्था ने कुछ जानकारी पर हस्ताक्षर किए हैं जो बाद में उस पर हस्ताक्षर करने से इनकार नहीं कर सकते हैं।

डिजिटल हस्ताक्षर बनाना

आइए अब सीखते हैं कि डिजिटल हस्ताक्षर कैसे बनाएं। आप नीचे दिए गए चरणों का पालन करके जावा का उपयोग करके डिजिटल हस्ताक्षर बना सकते हैं।

चरण 1: एक KeyPairGenerator ऑब्जेक्ट बनाएँ

KeyPairGenerator वर्ग प्रदान करता है getInstance() वह विधि जो आवश्यक कुंजी-जनरेटिंग एल्गोरिथ्म का प्रतिनिधित्व करने वाले स्ट्रिंग चर को स्वीकार करती है और KeyPairGenerator ऑब्जेक्ट देता है जो कुंजी उत्पन्न करता है।

सृजन करना KeyPairGenerator का उपयोग कर वस्तु getInstance() नीचे दिखाए अनुसार विधि।

//Creating KeyPair generator object
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("DSA");

चरण 2: KeyPairGenerator ऑब्जेक्ट को प्रारंभ करें

KeyPairGenerator क्लास नाम की एक विधि प्रदान करता है initialize()इस विधि का उपयोग कुंजी युग्म जनरेटर को आरंभ करने के लिए किया जाता है। यह विधि मुख्य आकार का प्रतिनिधित्व करने वाले पूर्णांक मान को स्वीकार करती है।

KeyPairGenerator ऑब्जेक्ट को चरण का उपयोग करके पिछले चरण में बनाया गया प्रारंभ करें initialize() नीचे दिखाए अनुसार विधि।

//Initializing the KeyPairGenerator
keyPairGen.initialize(2048);

चरण 3: KeyPairGenerator उत्पन्न करें

आप उत्पन्न कर सकते हैं KeyPair का उपयोग करते हुए generateKeyPair()तरीका। कुंजी जोड़ी का उपयोग करके उत्पन्न करेंgenerateKeyPair() नीचे दिखाए अनुसार विधि।

//Generate the pair of keys
KeyPair pair = keyPairGen.generateKeyPair();

चरण 4: जोड़ी से निजी कुंजी प्राप्त करें

का उपयोग कर उत्पन्न KeyPair ऑब्जेक्ट से आप निजी कुंजी प्राप्त कर सकते हैं getPrivate() तरीका।

का उपयोग कर निजी कुंजी प्राप्त करें getPrivate() नीचे दिखाए अनुसार विधि।

//Getting the private key from the key pair
PrivateKey privKey = pair.getPrivate();

चरण 5: एक हस्ताक्षर वस्तु बनाएं

getInstance() की विधि Signature वर्ग आवश्यक हस्ताक्षर एल्गोरिथ्म का प्रतिनिधित्व करने वाला एक स्ट्रिंग पैरामीटर स्वीकार करता है और संबंधित हस्ताक्षर वस्तु लौटाता है।

का उपयोग करके हस्ताक्षर वर्ग की एक वस्तु बनाएँ getInstance() तरीका।

//Creating a Signature object
Signature sign = Signature.getInstance("SHA256withDSA");

चरण 6: हस्ताक्षर वस्तु को प्रारंभ करें

initSign() हस्ताक्षर कक्षा की विधि एक स्वीकार करता है PrivateKey ऑब्जेक्ट और वर्तमान हस्ताक्षर ऑब्जेक्ट को इनिशियलाइज़ करता है।

का उपयोग करके पिछले चरण में बनाई गई हस्ताक्षर वस्तु को आरम्भिक करें initSign() नीचे दिखाए अनुसार विधि।

//Initialize the signature
sign.initSign(privKey);

चरण 7: हस्ताक्षर ऑब्जेक्ट में डेटा जोड़ें

update() हस्ताक्षर कक्षा की विधि डेटा को दर्शाती या सत्यापित की जाने वाली बाइट सरणी को स्वीकार करती है और दिए गए डेटा के साथ वर्तमान ऑब्जेक्ट को अपडेट करती है।

हस्ताक्षर किए जाने वाले डेटा को पास करके आरंभिक हस्ताक्षरित वस्तु को अपडेट करें update() नीचे के रूप में बाइट सरणी के रूप में विधि।

byte[] bytes = "Hello how are you".getBytes();      

//Adding data to the signature
sign.update(bytes);

चरण 8: हस्ताक्षर की गणना करें

sign() की विधि Signature वर्ग अद्यतन किए गए डेटा के हस्ताक्षर बाइट्स लौटाता है।

का उपयोग करके हस्ताक्षर की गणना करें sign() नीचे दिखाए अनुसार विधि।

//Calculating the signature
byte[] signature = sign.sign();

Example

निम्नलिखित जावा प्रोग्राम उपयोगकर्ता के एक संदेश को स्वीकार करता है और दिए गए संदेश के लिए एक डिजिटल हस्ताक्षर बनाता है।

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

उपरोक्त कार्यक्रम निम्नलिखित आउटपुट उत्पन्न करता है -

Enter some text
Hi how are you
Digital signature for given text: 0=@gRD???-?.???? /yGL?i??a!?