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)。
添加回答
舉報