Exemple de programme
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.security.SignatureException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *Échantillon pour effectuer la vérification de la signature et de la signature avec ECDSA 160 bits
 */
public class ECDSASignature {
    public static void main(String argv[]){
        signatureTest();
    }
    
    public static void signatureTest(){
        /**
         *Émettre une paire de clés
         */
        KeyPairGenerator keyPairGenerator = null;
        try {
            keyPairGenerator = KeyPairGenerator.getInstance("EC");
        } catch (NoSuchAlgorithmException ex) {
            return;
        }
        SecureRandom secureRandom = new SecureRandom();
        keyPairGenerator.initialize(160, secureRandom);
        KeyPair pair = keyPairGenerator.generateKeyPair();
        Key publicKey = pair.getPublic();
        Key privateKey = pair.getPrivate();        
        
        //Pour le moment, juste une chaîne de caractères
        String hako = "Qiita est un service de partage d'informations techniques pour les programmeurs.";
        
        /**
         *Signer avec une clé privée (ECDSA 160 bits)
         */
        byte[] sign = null;
        try {
            Signature signatureSign = null;
            signatureSign = Signature.getInstance("NONEwithECDSA");
            signatureSign.initSign((PrivateKey)privateKey, secureRandom);
            signatureSign.update(hako.getBytes());
            sign = signatureSign.sign();
            
            System.out.println("sign: " + new String(sign));
        } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException ex) {
            Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        /**
         *Vérifier la signature avec la clé publique
         */
        Signature signatureVerify = null;
        try {
            signatureVerify = Signature.getInstance("NONEwithECDSA");
            signatureVerify.initVerify((PublicKey)publicKey);
            signatureVerify.update(hako.getBytes());
            boolean verifyResult = signatureVerify.verify(sign);
            System.out.println(verifyResult ? "Signer OK" : "Signer NG");
            
        } catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
            Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE, null, e);
        }
        
    }
}
Résultat d'exécution
sign:(Omis)
Signer OK
        Recommended Posts