获取Ed25519 KeyPairGenerator实例时应使用何种密钥长度?
Ed25519密钥对生成器初始化的合法keysize值
Ed25519是固定密钥长度的椭圆曲线签名算法,它仅支持256位的密钥长度,这是该算法的固有特性。
你只需要将keysize设为256即可解决报错问题,修正后的代码如下:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); SecureRandom secureRandom = new SecureRandom(); int keysize = 256; // Ed25519唯一支持的密钥长度 keyPairGenerator.initialize(keysize, secureRandom); KeyPair keyPair = keyPairGenerator.generateKeyPair();
另外,由于Ed25519没有其他可选的密钥长度,你也可以直接调用仅接收SecureRandom的initialize重载方法,无需指定密钥长度,底层会自动使用默认的256位长度,代码更简洁:
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("Ed25519"); SecureRandom secureRandom = new SecureRandom(); keyPairGenerator.initialize(secureRandom); // 自动使用Ed25519的固定密钥长度 KeyPair keyPair = keyPairGenerator.generateKeyPair();
之前传入123报错,是因为Java的Ed25519实现只预定义了256位对应的参数,其他任何长度都会触发InvalidParameterException——从异常栈的EdDSAParameters.getBySize方法也能看出,系统会根据传入的size查找对应参数,找不到就抛出异常。
内容的提问来源于stack exchange,提问作者User8461
相关产品推荐
相关产品推荐

