以下就是签名工具类—Signature 源代码
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.SignatureException;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
public class License{
public static KeyPair getKeypair(){
KeyPairGenerator myKeyGen = null;
try {
myKeyGen = KeyPairGenerator.getInstance("RSA");
myKeyGen.initialize(1024);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
KeyPair myKeyPair = myKeyGen.generateKeyPair();
return myKeyPair;
}
public static String getSignature(PrivateKey privateKey,String data){
Signature sign;
String res = "";
try {
sign = Signature.getInstance("MD5WithRSA");
sign.initSign(privateKey);
sign.update(data.getBytes());
byte[] signSequ = sign.sign();
res = Base64.getEncoder().encodeToString(signSequ);
}catch(NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
}
return res;
}
public static boolean verify(String publicKey, String sign, String data){
boolean res = true;
try {
byte[] keyBytes = Base64.getDecoder().decode(publicKey);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicK = keyFactory.generatePublic(keySpec);
Signature signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicK);
signature.update(data.getBytes());
res = signature.verify(Base64.getDecoder().decode(sign));
}catch(NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (SignatureException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
return res;
}
public static void main(String[] args) {
String data = "给我签名吧!";
KeyPair keyPair = getKeypair();
String publicKey = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
String privateKey = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded());
System.out.println("公钥:" + publicKey);
System.out.println("私钥:" + privateKey);
PrivateKey pk = keyPair.getPrivate();
String signStr = getSignature(pk,data);
System.out.println("签名是:" + signStr);
System.out.println("验证签名的结果是:" + verify(publicKey,signStr,data));
}
}