1 回答

TA贡献1786条经验 获得超11个赞
这IllegalStateException (Phase already executed)
似乎尤其是由 SunEC 提供商的 ECDH 实现引起的。init
如果紧接在 之前执行(附加),则不会发生异常doPhase
。但是,这个init
-call 应该不是必需的,因为在执行doPhase
-call后,应该将-instance 重置为 -call 后的状态,至少根据-documentation:generateSecret
KeyAgreement
init
generateSecret
此方法将此 KeyAgreement 对象重置为最近调用 init 方法之一后所处的状态...
这可能是 SunEC 提供程序中的一个错误。如果使用 DH 代替 ECDH(并且使用 SunJCE 提供者代替 SunEC 提供者),则行为符合预期,即可以进行重复doPhase
调用(无需额外init
调用)。这同样适用于使用BouncyCastle提供程序的 ECDH。因此,您可以使用 BouncyCastle-provider 而不是 SunEC-provider 来使用您的代码运行 ECDH。
注意:第二个参数 ( lastPhase
)doPhase
应该设置为 true,否则IllegalStateException (Only two party agreement supported, lastPhase must be true)
会生成一个(至少对于 ECDH)。
添加回答
举报