Java實(shí)現(xiàn)的數(shù)字簽名算法RSA完整示例
本文實(shí)例講述了Java實(shí)現(xiàn)的數(shù)字簽名算法RSA。分享給大家供大家參考,具體如下:
一 背景介紹
數(shù)字簽名:帶有密鑰(公鑰、私鑰)的消息摘要算法。
驗(yàn)證數(shù)據(jù)完整性、認(rèn)證數(shù)據(jù)來(lái)源、抗否認(rèn)。
私鑰簽名、公鑰驗(yàn)證。
常用算法:RSA、DSA、ECDSA
二 RSA介紹
包括MD和SHA兩類(lèi)

三 Java代碼實(shí)現(xiàn)
package com.imooc.security.rsa2;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import org.apache.commons.codec.binary.Hex;
public class ImoocRSA {
private static String src = "cakin security rsa";
public static void main(String[] args) {
jdkRSA();
}
public static void jdkRSA() {
try {
//1.初始化密鑰
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(512);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey)keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey)keyPair.getPrivate();
//2.執(zhí)行簽名
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(src.getBytes());
byte[] result = signature.sign();
System.out.println("jdk rsa sign : " + Hex.encodeHexString(result));
//3.驗(yàn)證簽名
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(rsaPublicKey.getEncoded());
keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
signature = Signature.getInstance("MD5withRSA");
signature.initVerify(publicKey);
signature.update(src.getBytes());
boolean bool = signature.verify(result);
System.out.println("jdk rsa verify : " + bool);
} catch (Exception e) {
e.printStackTrace();
}
}
}
四 實(shí)現(xiàn)效果
jdk rsa sign : 64b62967438d05f8f9837a089aaecd3b1379fd8eef89b924632536deb95d94d8389da456014ee953a1ac1befe44612c61b750b48c8574b98a9855a07a724e7e4
jdk rsa verify : true
五 應(yīng)用場(chǎng)景

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線(xiàn)工具:
在線(xiàn)RSA加密/解密工具:
http://tools.jb51.net/password/rsa_encode
文字在線(xiàn)加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線(xiàn)加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線(xiàn)散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線(xiàn)MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線(xiàn)sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Java數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java PDF 添加數(shù)字簽名的實(shí)現(xiàn)方法
- java遇到微信小程序 "支付驗(yàn)證簽名失敗" 問(wèn)題解決
- 詳解Java數(shù)字簽名提供XML安全
- Java方法簽名的獲取實(shí)例代碼
- Java加密解密和數(shù)字簽名完整代碼示例
- 純Java實(shí)現(xiàn)數(shù)字證書(shū)生成簽名的簡(jiǎn)單實(shí)例
- Java將日期類(lèi)型Date時(shí)間戳轉(zhuǎn)換為MongoDB的時(shí)間類(lèi)型數(shù)據(jù)
- Java獲取凌晨時(shí)間戳的方法分析
- Java獲取精確到秒的時(shí)間戳方法
- Java 給PDF簽名時(shí)添加可信時(shí)間戳的方法
相關(guān)文章
MyBatis-Plus實(shí)現(xiàn)公共字段自動(dòng)填充功能詳解
在開(kāi)發(fā)中經(jīng)常遇到多個(gè)實(shí)體類(lèi)有共同的屬性字段,這些字段屬于公共字段,也就是很多表中都有這些字段,能不能對(duì)于這些公共字段在某個(gè)地方統(tǒng)一處理,來(lái)簡(jiǎn)化開(kāi)發(fā)呢?MyBatis-Plus就提供了這一功能,本文就來(lái)為大家詳細(xì)講講2022-08-08
Java abstract class 與 interface對(duì)比
這篇文章主要介紹了 Java abstract class 與 interface對(duì)比的相關(guān)資料,需要的朋友可以參考下2016-12-12
工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-08-08
Bloc事件流是一個(gè)阻塞隊(duì)列結(jié)論解析
這篇文章主要為大家介紹了Bloc事件流是一個(gè)阻塞隊(duì)列結(jié)論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
springboot中redis的緩存穿透問(wèn)題實(shí)現(xiàn)
這篇文章主要介紹了springboot中redis的緩存穿透問(wèn)題實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

