簡體   English   中英

在BouncyCastle上使用數字簽名算法(ECDSA)實現的橢圓曲線

[英]Elliptic Curve with Digital Signature Algorithm (ECDSA) implementation on BouncyCastle

我正在嘗試實現ECDSA(橢圓曲線數字簽名算法),但我在Java中找不到任何使用Bouncy Castle的例子。 我創建了密鑰,但我真的不知道我應該使用什么樣的函數來創建簽名並驗證它。

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();
}

owlstead是對的。 要詳細說明一下,你可以這樣做:

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);

BouncyCastle是一個提供者 :一組類,它提供了一些加密功能,應用程序應該通過Java附帶的通用API來使用它們。 請參閱Java Cryptography Architecture ,特別是有關簽名的部分,以了解如何生成或驗證簽名。 基本上,您獲得了一個java.security.Signature實例(使用靜態getInstance()方法),然后使用私鑰( initSign()生成簽名)或公鑰( initVerify()來初始化它驗證簽名)。 然后,您使用一個或多個update()調用輸入消息數據,最后調用sign()verify() ,以生成或驗證簽名。

您似乎主要使用Bouncy Castle作為提供者。 在這種情況下,您可以簡單地使用Signature.getInstance("SHA256withECDSA", "BC")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM