2015-05-08 14 views
5

Tôi cố gắng để tạo ra một bí mật được chia sẻ trong ứng dụng của tôi như thế này:Tạo PublicKey từ x và y giá trị của elip điểm đường cong

public static byte[] generateSharedSecret(PrivateKey privateKey PublicKey publicKey) { 
    KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH", "SC"); 
    keyAgreement.init(privateKey); 
    keyAgreement.doPhase(publicKey, true); 
    return keyAgreement.generateSecret(); 
} 

này đang làm việc tốt, nhưng PublicKey tôi sử dụng ở đây nên đến từ chương trình phụ trợ.

Phần phụ trợ chỉ gửi cho tôi giá trị xy của một điểm trên đường cong elip và bây giờ tôi phải tạo ra PublicKey từ đó. Nhưng tôi không thể hình dung ra được! Làm cách nào để tạo một cá thể PublicKey chỉ từ hai giá trị đó?

Trả lời

6

Nó thực sự khá đơn giản! Nhưng bạn cần thêm một điều nữa ngoài các giá trị xy. Bạn cũng cần một số ECParameterSpec! ECParameterSpec mô tả đường cong elliptic bạn đang sử dụng và ứng dụng của bạn phải sử dụng cùng một ECParameterSpec làm phụ trợ của bạn!


Với các giá trị xy bạn có thể tạo một thể hiện ECPoint và cùng với bạn ECParameterSpec bạn có thể tạo một ECPublicKeySpec:

ECParameterSpec ecParameters = ...; 
BigInteger x = ...; 
BigInteger y = ...; 

ECPoint ecPoint = new ECPoint(x, y); 
ECPublicKeySpec keySpec = new ECPublicKeySpec(ecPoint, ecParameters); 

Và bây giờ với ECPublicKeySpec mà bạn có thể tạo ra các PublicKey sử dụng một KeyFactory :

KeyFactory keyFactory = KeyFactory.getInstance("EC"); 
PublicKey publicKey = keyFactory.generatePublic(keySpec); 

Bạn có thể tìm thêm thông tin về chủ đề này here.

Các vấn đề liên quan