खोज…


क्रिप्टोग्राफिक हैश की गणना करें

विभिन्न एल्गोरिदम का उपयोग करके डेटा के अपेक्षाकृत छोटे ब्लॉकों की हैश की गणना करने के लिए:

final MessageDigest md5 = MessageDigest.getInstance("MD5");
final MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
final MessageDigest sha256 = MessageDigest.getInstance("SHA-256");

final byte[] data = "FOO BAR".getBytes();

System.out.println("MD5    hash: " + DatatypeConverter.printHexBinary(md5.digest(data)));
System.out.println("SHA1   hash: " + DatatypeConverter.printHexBinary(sha1.digest(data)));
System.out.println("SHA256 hash: " + DatatypeConverter.printHexBinary(sha256.digest(data)));

इस उत्पादन का उत्पादन:

MD5    hash: E99E768582F6DD5A3BA2D9C849DF736E
SHA1   hash: 0135FAA6323685BA8A8FF8D3F955F0C36949D8FB
SHA256 hash: 8D35C97BCD902B96D1B551741BBE8A7F50BB5A690B4D0225482EAA63DBFB9DED

जावा प्लेटफ़ॉर्म के आपके कार्यान्वयन के आधार पर अतिरिक्त एल्गोरिदम उपलब्ध हो सकते हैं।

क्रिप्टोग्राफिक रूप से यादृच्छिक डेटा उत्पन्न करें

क्रिप्टोग्राफिक रूप से यादृच्छिक डेटा के नमूने उत्पन्न करने के लिए:

final byte[] sample = new byte[16];

new SecureRandom().nextBytes(sample);

System.out.println("Sample: " + DatatypeConverter.printHexBinary(sample));

उत्पादन के समान उत्पादन:

Sample: E4F14CEA2384F70B706B53A6DF8C5EFE

नोट करें कि nextBytes() को कॉल किया जा सकता है जबकि एन्ट्रापी का उपयोग किया जा रहा एल्गोरिदम के आधार पर इकट्ठा किया जा सकता है।

एल्गोरिथ्म और प्रदाता निर्दिष्ट करने के लिए:

final byte[] sample = new byte[16];
final SecureRandom randomness = SecureRandom.getInstance("SHA1PRNG", "SUN");

randomness.nextBytes(sample);

System.out.println("Provider: " + randomness.getProvider());
System.out.println("Algorithm: " + randomness.getAlgorithm());
System.out.println("Sample: " + DatatypeConverter.printHexBinary(sample));

उत्पादन के समान उत्पादन:

Provider: SUN version 1.8
Algorithm: SHA1PRNG
Sample: C80C44BAEB352FD29FBBE20489E4C0B9

सार्वजनिक / निजी कुंजी जोड़े उत्पन्न करें

विभिन्न एल्गोरिदम और प्रमुख आकारों का उपयोग करके प्रमुख जोड़े उत्पन्न करने के लिए:

final KeyPairGenerator dhGenerator = KeyPairGenerator.getInstance("DiffieHellman");
final KeyPairGenerator dsaGenerator = KeyPairGenerator.getInstance("DSA");
final KeyPairGenerator rsaGenerator = KeyPairGenerator.getInstance("RSA");

dhGenerator.initialize(1024);
dsaGenerator.initialize(1024);
rsaGenerator.initialize(2048);

final KeyPair dhPair = dhGenerator.generateKeyPair();
final KeyPair dsaPair = dsaGenerator.generateKeyPair();
final KeyPair rsaPair = rsaGenerator.generateKeyPair();

अतिरिक्त एल्गोरिदम और कुंजी आकार आपके जावा प्लेटफॉर्म के कार्यान्वयन पर उपलब्ध हो सकते हैं।

चाबियाँ पैदा करते समय उपयोग करने के लिए यादृच्छिकता के स्रोत को निर्दिष्ट करने के लिए:

final KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");

generator.initialize(2048, SecureRandom.getInstance("SHA1PRNG", "SUN"));

final KeyPair pair = generator.generateKeyPair();

डिजिटल हस्ताक्षर की गणना और सत्यापन करें

हस्ताक्षर की गणना करने के लिए:

final PrivateKey privateKey = keyPair.getPrivate();
final byte[] data = "FOO BAR".getBytes();
final Signature signer = Signature.getInstance("SHA1withRSA");

signer.initSign(privateKey);
signer.update(data);

final byte[] signature = signer.sign();

ध्यान दें कि हस्ताक्षर एल्गोरिथ्म कुंजी जोड़ी उत्पन्न करने के लिए उपयोग किए गए एल्गोरिथ्म के साथ संगत होना चाहिए।

हस्ताक्षर सत्यापित करने के लिए:

final PublicKey publicKey = keyPair.getPublic();
final Signature verifier = Signature.getInstance("SHA1withRSA");

verifier.initVerify(publicKey);
verifier.update(data);

System.out.println("Signature: " + verifier.verify(signature));

इस उत्पादन का उत्पादन:

Signature: true

सार्वजनिक / निजी कुंजी के साथ डेटा एन्क्रिप्ट और डिक्रिप्ट करें

सार्वजनिक कुंजी के साथ डेटा एन्क्रिप्ट करने के लिए:

final Cipher rsa = Cipher.getInstance("RSA");

rsa.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
rsa.update(message.getBytes());
final byte[] result = rsa.doFinal();

System.out.println("Message: " + message);
System.out.println("Encrypted: " + DatatypeConverter.printHexBinary(result));

उत्पादन के समान उत्पादन:

Message: Hello
Encrypted: 5641FBB9558ECFA9ED...

ध्यान दें कि Cipher ऑब्जेक्ट बनाते समय, आपको एक परिवर्तन निर्दिष्ट करना होगा जो कुंजी के प्रकार के साथ संगत हो। (समर्थित परिवर्तनों की सूची के लिए जेसीए मानक एल्गोरिथम नाम देखें।) RSA एन्क्रिप्शन डेटा के लिए message.getBytes() लंबाई कुंजी आकार से छोटी होनी चाहिए। विस्तार के लिए यह एसओ उत्तर देखें।

डेटा को डिक्रिप्ट करने के लिए:

final Cipher rsa = Cipher.getInstance("RSA");

rsa.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
rsa.update(cipherText);
final String result = new String(rsa.doFinal());

System.out.println("Decrypted: " + result);

निम्नलिखित उत्पादन करता है:

Decrypted: Hello


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow