2010-02-07 15 views
8

में एक बाइट एन्कोडेड कुंजी को अपने मूल ईसीपीब्लिककी में वापस करें जावा में मेरे पास एक ईसीडीएच सार्वजनिक कुंजी है जिसे मैं बाइट सरणी के रूप में भेज रहा हूं।बाउंसी कैसल

एक बार मुझे बाइट सरणी प्राप्त हो जाने के बाद मैं इसे सार्वजनिक कुंजी में कैसे बदल सकता हूं?

मैं बाउंसी कैसल का उपयोग कर रहा हूं लेकिन जावा समाधान उतना ही उपयोगी होगा।

धन्यवाद

+1

क्या वर्ग आप अपने जावा ECDH प्रतिनिधित्व करने के लिए उपयोग कर रहे हैं सार्वजनिक कुंजी? आपको अपना कोड दिखाकर बेहतर जवाब मिलते हैं और लोगों को अनुमान लगाने की आवश्यकता नहीं होती है। –

उत्तर

-1

कच्चे बाइट्स ECDH कुंजी के लिए स्वरूपित हैं कैसे? आप कच्चे बाइट कहां प्राप्त कर रहे हैं?

आम तौर पर, कच्चे कुंजी सामग्री को कुंजी में बदलने के लिए उचित * स्पेक क्लास का उपयोग करता है लेकिन ECPublicKeySpec और DHPublicKeySpec कक्षाएं कच्चे बाइट सरणी को स्वीकार नहीं करती हैं।

4

जब आपको एन्कोडेड कुंजी मिलती है, मान लीजिए कि आपने डिफ़ॉल्ट "[अपनी कीपैयर] .getPublic() प्राप्त किया है। GetEncoded()" विधि, यह काम करेगा।

X509EncodedKeySpec ks = new X509EncodedKeySpec(pubKeyByteString.toByteArray()); 
    KeyFactory kf; 
    try { 
     kf = java.security.KeyFactory.getInstance("ECDH"); 
    } catch (NoSuchAlgorithmException e) { 
     log.error("Cryptography error: could not initialize ECDH keyfactory!", e); 
     return; 
    } 

    ECPublicKey remotePublicKey; 

    try { 
     remotePublicKey = (ECPublicKey)kf.generatePublic(ks); 
    } catch (InvalidKeySpecException e) { 
     log.warn("Received invalid key specification from client",e); 
     return; 
    } catch (ClassCastException e) { 
     log.warn("Received valid X.509 key from client but it was not EC Public Key material",e); 
     return; 
    } 
+0

आपने अपना दिन बचाया .. आपके उत्तर के लिए धन्यवाद .. – Bunny

+0

मुझे java.security.spec.InvalidKeySpecException मिलता है: एन्कोडेड कुंजी spec मान्यता नहीं है – Justas

3

मुझे उपरोक्त समाधान @LaceCard ने मेरे लिए काम नहीं किया है। सामान्य तौर पर यह स्पष्ट नहीं है लेकिन फिर क्रिप्टोग्राफी में कुछ भी नहीं है;)

String key = "MihU9ztW9sEvkBL6BxyaOMgkSbodNS8yoHaHcio+WE...blahblah" 
byte[] keyBytes = Base64.decode(key); 

//If using Android and Spongycastle provider should be "SC" 
KeyFactory kf = KeyFactory.getInstance("ECDH", "BC"); 
//CURVE_NAME e.g prime192v1 
ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec(CURVE_NAME); 
ECPoint point = ecSpec.getCurve().decodePoint(keyBytes); 
ECPublicKeySpec pubSpec = new ECPublicKeySpec(point, ecSpec); 

ECPublicKey myECPublicKey = (ECPublicKey) kf.generatePublic(pubSpec); 

नोट: यदि आप संभावित अपवाद को प्रबंधित करना होगा उचित रूप से

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

  • कोई संबंधित समस्या नहीं^_^