Beispielprogramm
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;
/**
*Beispiel zum Signieren und Überprüfen der Signatur mit ECDSA 160bit
*/
public class ECDSASignature {
public static void main(String argv[]){
signatureTest();
}
public static void signatureTest(){
/**
*Schlüsselpaar ausgeben
*/
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();
//Zur Zeit nur eine Zeichenkette
String hako = "Qiita ist ein technischer Informationsaustauschdienst für Programmierer.";
/**
*Mit privatem Schlüssel signieren (ECDSA 160bit)
*/
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);
}
/**
*Überprüfen Sie die Signatur mit dem öffentlichen Schlüssel
*/
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 ? "Unterschreiben Sie OK" : "Zeichen NG");
} catch (NoSuchAlgorithmException | InvalidKeyException | SignatureException e) {
Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE, null, e);
}
}
}
Ausführungsergebnis
sign:(Weggelassen)
Unterschreiben Sie OK
Recommended Posts