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;
/**
*?ECDSA?160bit?簽名及簽名驗證例子 */public?class?ECDSASignature?{
public?static?void?main(String?argv[])?{
signatureTest();
}
public?static?void?signatureTest()?{
/**
*?密鑰對生成 */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();
//?字符串
String?hako?=?"test";
/**
*?私鑰簽名(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);
}
/**
*?用公鑰進行簽名驗證 */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"簽名OK"?:?"簽名NG");
}?catch?(NoSuchAlgorithmException?|?InvalidKeyException?|?SignatureException?e)?{
Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE,?null,?e);
}
}
}
/java-%E7%94%B5%E5%AD%90%E7%AD%BE%E5%90%8D%E8%8C%83%E4%BE%8B%E4%BB%A3%E7%A0%81/