Java 数字签名

一、系统环境

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;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值