/**
* <p>Description: 数字签名</p>
*
* @author XXX
* @date 2020/12/14 22:17
* @since JDK1.8
*/
public class SignatureDemo {
private static Base64.Encoder encoder = Base64.getEncoder();
private static Base64.Decoder decoder = Base64.getDecoder();
private static final String RSA = "RSA";
public static void main(String[] args) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(RSA);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
String signatureString = getSignature("哈哈", "sha256withrsa", privateKey);
System.out.println("signature-------" + signatureString);
boolean result = verifySignatrue("哈哈", "sha256withrsa", publicKey, signatureString);
System.out.println("result---------"+result);
}
private static String getSignature(String text, String algorithm, PrivateKey privateKey) throws Exception {
//获取签名对象
Signature signature = Signature.getInstance(algorithm);
//初始化对象
signature.initSign(privateKey);
//传入原文
signature.update(text.getBytes());
//开始签名
byte[] sign = signature.sign();
//Base64 编码
return new String(encoder.encode(sign));
}
private static boolean verifySignatrue(String text, String algorithm,
PublicKey publicKey, String signatureString) throws Exception {
Signature signature = Signature.getInstance(algorithm);
//初始化校验
signature.initVerify(publicKey);
//传入原文
signature.update(text.getBytes());
//校验数据
return signature.verify(decoder.decode(signatureString));
}
}
05_数字签名
最新推荐文章于 2024-01-24 18:47:02 发布