一、系统环境
jdk21
签名类型 SHA256withRSA
二、算法
三、程序实现
package stu.sis;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
import java.util.Base64;
import com.nimbusds.jose.util.StandardCharset;
public class SignatureTest {
public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
//签名信息
String strText = "12345654443";
//获取秘钥
KeyPair keyPair = generateRsaKey();
//签名类型
Signature signature = Signature.getInstance("SHA256withRSA");
//初始化私钥
signature.initSign(keyPair.getPrivate());
//加载签名信息
signature.update(strText.getBytes(StandardCharset.UTF_8));
//签名
byte[] bytes = signature.sign();
//转base64 url
String j64=Base64.getUrlEncoder().encodeToString(bytes);
System.out.println(j64);
//签名类型
signature = Signature.getInstance("SHA256withRSA");
//初始化公钥
signature.initVerify(keyPair.getPublic());
//加载签名信息
signature.update(strText.getBytes(StandardCharset.UTF_8));
//验签
System.out.println(signature.verify(Base64.getUrlDecoder().decode(j64)));
}
private static KeyPair generateRsaKey() {
KeyPair keyPair;
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
keyPair = keyPairGenerator.generateKeyPair();
} catch (Exception ex) {
throw new IllegalStateException(ex);
}
return keyPair;
}
}