1 回答

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊
這IllegalStateException (Phase already executed)
似乎尤其是由 SunEC 提供商的 ECDH 實(shí)現(xiàn)引起的。init
如果緊接在 之前執(zhí)行(附加),則不會(huì)發(fā)生異常doPhase
。但是,這個(gè)init
-call 應(yīng)該不是必需的,因?yàn)樵趫?zhí)行doPhase
-call后,應(yīng)該將-instance 重置為 -call 后的狀態(tài),至少根據(jù)-documentation:generateSecret
KeyAgreement
init
generateSecret
此方法將此 KeyAgreement 對(duì)象重置為最近調(diào)用 init 方法之一后所處的狀態(tài)...
這可能是 SunEC 提供程序中的一個(gè)錯(cuò)誤。如果使用 DH 代替 ECDH(并且使用 SunJCE 提供者代替 SunEC 提供者),則行為符合預(yù)期,即可以進(jìn)行重復(fù)doPhase
調(diào)用(無需額外init
調(diào)用)。這同樣適用于使用BouncyCastle提供程序的 ECDH。因此,您可以使用 BouncyCastle-provider 而不是 SunEC-provider 來使用您的代碼運(yùn)行 ECDH。
注意:第二個(gè)參數(shù) (?lastPhase
)doPhase
應(yīng)該設(shè)置為 true,否則IllegalStateException (Only two party agreement supported, lastPhase must be true)
會(huì)生成一個(gè)(至少對(duì)于 ECDH)。
添加回答
舉報(bào)