java.security.Signature 是JCA中提供簽名和驗簽服務(wù)器的類。
實例化
Signature
沒有公開的構(gòu)造方法痹升,所以只能調(diào)用其靜態(tài)方法getInstace
進(jìn)行實現(xiàn)化。這個方法有多個重載如下:
public static Signature getInstance(String algorithm)
throws NoSuchAlgorithmException;
public static Signature getInstance(String algorithm, String provider)
throws NoSuchAlgorithmException, NoSuchProviderException;
public static Signature getInstance(String algorithm, Provider provider)
throws NoSuchAlgorithmException;
我們通常使用的是public static Signature getInstance(String algorithm)
渣刷;此方法需要一個字符串作為參數(shù)惩系,用于說明使用哪個簽名/驗簽算法。
初始化
Signature 類提供了兩個初始化方法(initSign/initVerify)分別用于簽名和驗簽谤专。
//簽名初始化
public final void initSign(PrivateKey privateKey)
throws InvalidKeyException;
//簽名初始化
public final void initSign(PrivateKey privateKey, SecureRandom random)
throws InvalidKeyException;
//驗簽初始化
public final void initVerify(PublicKey publicKey)
throws InvalidKeyException;
//簽名初始化
public final void initVerify(Certificate certificate)
throws InvalidKeyException
簽名時需要使用私鑰,而驗簽時需要使用公鑰午绳,所以在執(zhí)行簽名或驗簽算法之前需要使用私鑰或公鑰對Signature
實例進(jìn)行初始化置侍。
注:驗簽時還可以使用證書,所以用于驗簽的Signature
實例可以使用Certificate
對象進(jìn)行初始化拦焚。
update 方法 更新數(shù)據(jù)
public final void update(byte b) throws SignatureException;
public final void update(byte[] data) throws SignatureException;
public final void update(byte[] data, int off, int len)
throws SignatureException;
public final void update(ByteBuffer data) throws SignatureException;
使用指定信息更新(待簽/待驗)數(shù)據(jù)蜡坊;
簽名和驗簽方法
// 簽名方法
public final byte[] sign() throws SignatureException;
public final int sign(byte[] outbuf, int offset, int len)
throws SignatureException;
無參方法直接返回簽名后的結(jié)果,有參方法則是把簽名結(jié)果按要求參數(shù)給定的byte數(shù)組之中赎败。通常我們使用無參方法就足夠了秕衙。
// 驗簽方法
public final boolean verify(byte[] signature) throws SignatureException;
public final boolean verify(byte[] signature, int offset, int length);
支持的算法
- MD2withRSA
- MD5withRSA
- SHA1withRSA
- SHA224withRSA
- SHA256withRSA
- SHA384withRSA
- SHA512withRSA
- MD5andSHA1withRSA
- SHA1withDSA
- NONEwithDSA
- SHA224withDSA
- SHA256withDSA
- NONEwithECDSA
- SHA1withECDSA
- SHA224withECDSA
- SHA256withECDSA
- SHA384withECDSA
- SHA512withECDSA