java 签名 解密_JAVA加解密 -- 数字签名算法

数字签名 – 带有密钥的消息摘要算法

作用:验证数据完整性、认证数据来源、抗否认(OSI参考模型)

私钥签名,公钥验证

RSA 包含非对称算法和数字签名算法

479e6ef03f33c0c65ef5a51cb978b62b.png

cb56c29d2a50d48f5b721e9684421a14.png

实现代码:

//1.初始化密钥

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

keyPairGenerator.initialize(512);

KeyPair keyPair = keyPairGenerator.generateKeyPair();

RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();

RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();

//执行签名

PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(rsaPrivateKey.getEncoded());

KeyFactory keyFactory = KeyFactory.getInstance("RSA");

PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);

Signature signature = Signature.getInstance("MD5withRSA");

signature.initSign(privateKey);

signature.update(str.getBytes());

byte[] result = signature.sign();

System.out.println("JDK RSA SIGN:" + Hex.encodeHexString(result));

//3.验证签名

X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());

keyFactory = keyFactory.getInstance("RSA");

PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);

signature = Signature.getInstance("MD5withRSA");

signature.initVerify(publicKey);

signature.update(str.getBytes());

boolean falg = signature.verify(result);

System.out.println("JDK RSA VERIFY:"+falg);

DSA DSS -- 数字签名标准 DSA仅包含数字签名

ECDSA 椭圆曲线数字签名算法,JDK1.7之后才有的内容

实现方式和RSA一致 只需将指定地方改为EC,再在首句加上Security.addProvider(new BouncyCastlePQCProvider());即可

1290881df78589e17c65cd41b9dc9b81.png

JAVA加解密算法源码:http://download.csdn.net/detail/jacxuan/9774737

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值