2013-08-15 15 views
7

üzerinde Dijital İmza Algoritması (ECDSA) uygulamalı Eliptik Eğri ECDSA'yı (Elliptic Curve Digital Signature Algorithm) uygulamaya çalışıyorum ancak Java'da Bouncy Castle kullanan hiçbir örnek bulamadım. Anahtarları oluşturdum ama imza oluşturmak ve onu doğrulamak için ne tür işlevler kullanmam gerektiğini gerçekten bilmiyorum.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

yardımcı olmadı, ama aynı soruyu şu adresten de yaptım: crypto.stackexchange.com – Yagiz

+1

Birkaç yıl önce, şifreleme kitaplıklarının doğru kullanımının kod örnekleri konuyla ilgiliydi. Şu an bu kadar emin değilim. ... doğru, ıslatılmış, güvenlikle ilgili bir kodla zengin bir yere sahip olmak güzel olurdu. – LamonteCristo

cevap

11

Owlstead doğrudur.

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

Ve doğrulamak için: Ve biraz daha ayrıntılı olarak belirlemek amacıyla bunu yapabilirsiniz

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

"Java Security API Sağlayıcısı adı artık BC yerine SC'dir" https://rtyley.github.io/spongycastle/ – JDOaktown

1

Bouncy Castle'ı çoğunlukla sağlayıcı olarak kullanıyor görünüyorsunuz. Bu durumda, Signature.getInstance("SHA256withECDSA", "BC")'u kullanabilirsiniz.

5

BouncyCastle bir sağlayıcı: uygulamalar gerekiyordu bazı şifreleme işlevleri sağlayan sınıflar kümesi Java ile birlikte gelen genel API ile kullanmak. İmzanın nasıl oluşturulacağını veya doğrulandığını görmek için, özellikle imzalardaki bölüm Java Cryptography Architecture'a bakın. Temel olarak, java.security.Signature örneğini (statik getInstance() yöntemiyle) alırsınız, ardından özel bir anahtar (bir imza oluşturmak için initSign(), bir imza) veya bir genel anahtar (bir imzayı doğrulamak için initVerify()) ile başlatırsınız. Ardından mesaj verilerini bir veya birkaç update() çağrı ile girdikten sonra bir imzayı oluşturmak veya doğrulamak için sign() veya verify() numaralı telefonu arayın.