java.security.NoSuchAlgorithmException: Ed25519 KeyPairGenerator不可用。

问题描述 投票:0回答:1

我已经尝试使用EdDSA算法来生成密钥,使用jar eddsa 0.3.0。然而,我得到的是 java.security.NoSuchAlgorithmException: Ed25519 KeyPairGenerator not available 当我试图做 KeyPairGenerator.getInstance("Ed25519");

另外,我有以下的例外情况 java.security.NoSuchAlgorithmException: Ed25519 Signature not available 当我试图生成签名时,有什么例子可以让它工作吗?

我已经做了研究,但我是加密阶段的新手,我真的不明白我应该如何使它工作。

我知道eddsaparam构造函数是错误的。下面的代码。

KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("EdDSA");//getInstance("ECDSA","BC");//EDDSA
            SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");

            EdDSANamedCurveSpec ed25519 = EdDSANamedCurveTable.getByName("Ed25519");

            EdDSAParameterSpec edDSAParameterSpec = new EdDSAParameterSpec(ed25519, "Ed25519");

            keyPairGenerator.initialize(edDSAParameterSpec,secureRandom);
java security digital-signature signature cryptocurrency
1个回答
0
投票

我担心 "Ed25519 "是个错别字,应该是 "EdDSA"。

假设你的pom文件包含了这个。

<dependency>
    <groupId>net.i2p.crypto</groupId>
    <artifactId>eddsa</artifactId>
    <version>0.3.0</version>
</dependency>

而你的代码类似于这样

import net.i2p.crypto.eddsa.EdDSASecurityProvider;

import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;

public class App {
    public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchProviderException {
        // throws NoSuchAlgorithmException: EdDSA KeyPairGenerator not available
        //KeyPairGenerator.getInstance("EdDSA");

        // add eddsa to the security providers
        Security.addProvider(new EdDSASecurityProvider());

        // throws: NoSuchAlgorithmException: Ed25519 KeyPairGenerator not available
        //KeyPairGenerator.getInstance("Ed25519");

        // throws: NoSuchAlgorithmException: no such algorithm: Ed25519 for provider EdDSA
        //KeyPairGenerator.getInstance("Ed25519", "EdDSA");

        // works
        KeyPairGenerator.getInstance("EdDSA", "EdDSA");

        // also works
        KeyPairGenerator.getInstance("EdDSA");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.