2013-08-15 5 views
7

पर डिजिटल हस्ताक्षर एल्गोरिदम (ईसीडीएसए) कार्यान्वयन के साथ अंडाकार वक्र, मैं ईसीडीएसए (एल्लिप्टिक वक्र डिजिटल हस्ताक्षर एल्गोरिदम) को लागू करने की कोशिश कर रहा हूं लेकिन मुझे जावा में कोई उदाहरण नहीं मिला जो बाउंसी कैसल का उपयोग करता है। मैंने चाबियां बनाई हैं, लेकिन मुझे नहीं पता कि मुझे हस्ताक्षर बनाने और इसे सत्यापित करने के लिए किस तरह के कार्यों का उपयोग करना चाहिए।BouncyCastle

public static KeyPair GenerateKeys() 
    throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException 
{ 
    ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("B-571"); 
    KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC"); 
    g.initialize(ecSpec, new SecureRandom()); 
    return g.generateKeyPair(); 
} 
+0

इससे मदद नहीं मिली, लेकिन मैंने crypto.stackexchange.com पर भी वही प्रश्न बनाया है – Yagiz

+1

कुछ साल पहले, एन्क्रिप्शन पुस्तकालयों के सही उपयोग के कोड नमूने विषय पर थे। मुझे यकीन नहीं है कि अब यह मामला है। ... हालांकि यह सटीक, vetted, सुरक्षा से संबंधित कोड के साथ समृद्ध जगह होना अच्छा लगेगा। – LamonteCristo

उत्तर

11

उल्लू सही है। और थोड़ा और विस्तृत करने के लिए, आप यह कर सकते हैं:

KeyPair pair = GenerateKeys(); 
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA", "BC"); 
ecdsaSign.initSign(pair.getPrivate()); 
ecdsaSign.update(plaintext.getBytes("UTF-8")); 
byte[] signature = ecdsaSign.sign(); 

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

Signature ecdsaVerify = Signature.getInstance("SHA256withECDSA", "BC"); 
ecdsaVerify.initVerify(pair.getPublic()); 
ecdsaVerify.update(plaintext.getBytes("UTF-8")); 
boolean result = ecdsaVerify.verify(signature); 
+0

"जावा सुरक्षा API प्रदाता नाम अब बीसी के बजाय एससी है" https://rtyley.github.io/spongycastle/ – JDOaktown

1

आप प्रदाता के रूप में मुख्य रूप से बाउंसी कैसल का उपयोग कर रहे हैं। उस स्थिति में आप बस Signature.getInstance("SHA256withECDSA", "BC") का उपयोग कर सकते हैं।

5

BouncyCastle है एक प्रदाता: वर्गों का एक सेट जो कुछ क्रिप्टोग्राफ़िक कार्यक्षमताओं कि आवेदनों की अपेक्षा की जाती प्रदान करता है जेनेरिक एपीआई के माध्यम से उपयोग करने के लिए जावा के साथ आता है। हस्ताक्षर उत्पन्न करने या सत्यापित करने के तरीके को देखने के लिए Java Cryptography Architecture, विशेष रूप से हस्ताक्षर पर अनुभाग देखें। असल में, आपको java.security.Signature उदाहरण (स्थिर getInstance() विधि के साथ) प्राप्त होता है, फिर आप इसे हस्ताक्षर सत्यापित करने के लिए या तो एक निजी कुंजी (initSign(), हस्ताक्षर उत्पन्न करने के लिए) या सार्वजनिक कुंजी (initVerify()) के साथ प्रारंभ करते हैं। फिर आप एक या कई update() कॉल के साथ संदेश डेटा इनपुट करते हैं, और अंत में आप हस्ताक्षर उत्पन्न करने या सत्यापित करने के लिए sign() या verify() पर कॉल करते हैं।

संबंधित मुद्दे