以下に、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); }}
✅ 注意点
この記事へのコメント