第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Java Diffie hellman 初始化 ECDHKeyAgreement

Java Diffie hellman 初始化 ECDHKeyAgreement

飲歌長(zhǎng)嘯 2023-07-28 16:31:22
我有一個(gè)像這樣的 Diffie-Hellman 安全類:public class AESSecurityCap {    private PublicKey publicKey;    KeyAgreement keyAgreement;    byte[] sharedsecret;    AESSecurityCap() {        makeKeyExchangeParams();    }    private void makeKeyExchangeParams() {        KeyPairGenerator kpg = null;        try {            kpg = KeyPairGenerator.getInstance("EC");            kpg.initialize(128);            KeyPair kp = kpg.generateKeyPair();            publicKey = kp.getPublic();            keyAgreement = KeyAgreement.getInstance("ECDH");            keyAgreement.init(kp.getPrivate());        } catch (NoSuchAlgorithmException | InvalidKeyException e) {            e.printStackTrace();        }    }    public void setReceiverPublicKey(PublicKey publickey) {        try {            keyAgreement.doPhase(publickey, false);  // <--- Error on this line            sharedsecret = keyAgreement.generateSecret();        } catch (InvalidKeyException e) {            e.printStackTrace();        }    }} 并實(shí)現(xiàn)了這個(gè)類:public class Node extends AESSecurityCap {}有時(shí)我需要重新初始化 DH keyAgreement:public class TestMainClass {    public static void main(String[] args) {        Node server = new Node();        Node client = new Node();        server.setReceiverPublicKey(client.getPublicKey());        client.setReceiverPublicKey(server.getPublicKey());        // My problem is this line ,        // Second time result exception        server.setReceiverPublicKey(client.getPublicKey());     }}有沒有辦法多次重新初始化ECDH KeyAgreement?這是我的測(cè)試用例:客戶端初始化DH并生成公鑰??蛻舳藢⒐€發(fā)送到服務(wù)器。服務(wù)器用客戶端密鑰初始化DH并生成自己的公鑰并生成共享密鑰。服務(wù)器將公鑰發(fā)送給客戶端??蛻舳耸褂梅?wù)器公鑰生成共享密鑰。在此步驟中,客戶端和服務(wù)器具有公鑰和共享秘密。我的問題是客戶端斷開連接()和 KeyAgreement 由單例對(duì)象初始化,并且不會(huì)第二次重新初始化。有時(shí)我需要做這個(gè)課題。請(qǐng)指導(dǎo)我解決這個(gè)問題。
查看完整描述

1 回答

?
Qyouu

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:generateSecretKeyAgreementinitgenerateSecret

此方法將此 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)。

查看完整回答
反對(duì) 回復(fù) 2023-07-28
  • 1 回答
  • 0 關(guān)注
  • 204 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)