楕円曲線暗号をjavaで実装してください。

emile-perron-xrVDYZRGdw4-unsplash.jpg

質問

楕円曲線暗号をjavaで実装してください。


解答

以下に、Javaで楕円曲線暗号(ECC)を使った鍵生成・暗号化・復号化の基本的な例を紹介します。

Javaの標準ライブラリ(java.security および javax.crypto)を使って、楕円曲線暗号(ECDH/ECDSA)に基づく鍵ペアの生成と署名・検証の実装を行います。


✅ ECC鍵ペアの生成(例:secp256r1)

import java.security.*;public class ECCKeyGenExample {    public static void main(String[] args) throws Exception {        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");        keyGen.initialize(new ECGenParameterSpec("secp256r1")); // 曲線を指定        KeyPair keyPair = keyGen.generateKeyPair();        System.out.println("Public Key: " + keyPair.getPublic());        System.out.println("Private Key: " + keyPair.getPrivate());    }}

✅ デジタル署名(ECDSA)と検証の例

import java.security.*;import java.security.spec.ECGenParameterSpec;import java.util.Base64;public class ECCSignatureExample {    public static void main(String[] args) throws Exception {        // 鍵ペア生成        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("EC");        keyGen.initialize(new ECGenParameterSpec("secp256r1"));        KeyPair keyPair = keyGen.generateKeyPair();        // メッセージ        String message = "Hello, ECC!";        byte[] messageBytes = message.getBytes();        // 署名作成(ECDSA)        Signature signer = Signature.getInstance("SHA256withECDSA");        signer.initSign(keyPair.getPrivate());        signer.update(messageBytes);        byte[] signature = signer.sign();        System.out.println("署名(Base64): " + Base64.getEncoder().encodeToString(signature));        // 署名検証        Signature verifier = Signature.getInstance("SHA256withECDSA");        verifier.initVerify(keyPair.getPublic());        verifier.update(messageBytes);        boolean isValid = verifier.verify(signature);        System.out.println("署名の検証結果: " + isValid);    }}

✅ 注意点

  • ECCで「暗号化/復号」は直接行わず、通常はECDHで共通鍵を生成し、AESなどと組み合わせて使います

  • Javaで本格的に楕円曲線暗号を扱いたい場合は、**Bouncy Castle(暗号ライブラリ)**の導入がおすすめです。





リバーシを作りながら学ぶJavaScript AIの基本対戦プログラムの開発に挑戦!/柳井政和【3000円以上送料無料】

価格:3080円
(2025/7/31 12:01時点)
感想(0件)


開眼!JavaScript 言語仕様から学ぶJavaScriptの本質 [ コディ・リンドレー ]

価格:2420円
(2023/11/25 20:41時点)
感想(0件)


 



この記事へのコメント

広告です。クリックいただけると励みになります。