日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据安全管理:RSA加密算法,签名验签流程详解

發布時間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据安全管理:RSA加密算法,签名验签流程详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文源碼:GitHub·點這里 || GitEE·點這里

一、RSA算法簡介

1、加密解密

RSA加密是一種非對稱加密,在公開密鑰加密和電子商業中RSA被廣泛使用。可以在不直接傳遞密鑰的情況下,完成加解密操作。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。該加密算法的原理就是對一極大整數做因數分解的困難性來保證安全性。

2、簽名驗簽

數字簽名就是信息的來源添加一段無法被偽造的加密字符串,這段數字串作為對信息的來源真實性的一個有效證明。這個過程稱為簽名和驗簽。

二、場景描述

  • 消息發送方:甲方,持有公鑰
  • 消息接收方:乙方,持有私鑰

1、加密解密過程

(1)、乙方生成一對密鑰即公鑰和私鑰,私鑰不公開,乙方自己持有,公鑰為公開,甲方持有。

(2)、乙方收到甲方加密的消息,使用私鑰對消息進行解密,獲取明文。

2、簽名驗簽過程

(1)、乙方收到消息后,需要回復甲方,用私鑰對回復消息簽名,并將消息明文和消息簽名回復甲方。

(2)、甲方收到消息后,使用公鑰進行驗簽,如果驗簽結果是正確的,則證明消息是乙方回復的。

三、源代碼實現

1、密鑰字符串獲取

  • 代碼生成
private static HashMap<String, String> getTheKeys() {HashMap<String, String> keyPairMap = new HashMap<String, String>();KeyPairGenerator keyPairGen = null;try {keyPairGen = KeyPairGenerator.getInstance("RSA");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}// 密鑰大小:1024 位keyPairGen.initialize(1024);KeyPair keyPair = keyPairGen.generateKeyPair();String publicKey = printBase64Binary(keyPair.getPublic().getEncoded());String privateKey = printBase64Binary(keyPair.getPrivate().getEncoded());keyPairMap.put("publicKey", publicKey);keyPairMap.put("privateKey", privateKey);return keyPairMap ; }
  • 讀取文件

文件位置

public static final String PUB_KEY = "rsaKey/public.key" ; public static final String PRI_KEY = "rsaKey/private.key" ;

文件加載

public static String getKey (String keyPlace) throws Exception {BufferedReader br= null;try {br= new BufferedReader(new InputStreamReader(RsaCryptUtil.class.getClassLoader().getResourceAsStream(keyPlace)));String readLine= null;StringBuilder keyValue = new StringBuilder();while((readLine= br.readLine())!=null){if(!(readLine.charAt(0)=='-')){keyValue.append(readLine);}}return keyValue.toString();} catch (Exception e) {throw new Exception("RSA密鑰讀取錯誤",e) ;} finally{if (br != null) {try {br.close();} catch (Exception e) {System.out.println("密鑰讀取流關閉異常");}}} }

2、公鑰和私鑰

  • 公鑰字符串生成公鑰
public static RSAPublicKey createPublicKey(String publicKeyValue) throws Exception {try {byte[] buffer = DatatypeConverter.parseBase64Binary(publicKeyValue);KeyFactory keyFactory = KeyFactory.getInstance("RSA");X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer);return (RSAPublicKey) keyFactory.generatePublic(keySpec);} catch (Exception e) {throw new Exception("公鑰創建失敗", e);} }
  • 私鑰字符串生成私鑰
public static RSAPrivateKey createPrivateKey(String privateKeyValue) throws Exception {try {byte[] buffer = javax.xml.bind.DatatypeConverter.parseBase64Binary(privateKeyValue);PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);KeyFactory keyFactory = KeyFactory.getInstance("RSA");return (RSAPrivateKey) keyFactory.generatePrivate(keySpec);} catch (Exception e) {throw new Exception("私鑰創建失敗", e);} }

3、加密和解密

  • 公鑰加密
public static String encrypt(RSAPublicKey publicKey, byte[] clearData) throws Exception {if (publicKey == null) {throw new Exception("加密公鑰為空, 無法加密");}try {Cipher cipher = Cipher.getInstance("RSA") ;cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] output = cipher.doFinal(clearData);return printBase64Binary(output);} catch (Exception e) {throw new Exception("公鑰加密失敗",e);} }
  • 私鑰解密
public static String decrypt(RSAPrivateKey privateKey, byte[] cipherData) throws Exception {if (privateKey == null) {throw new Exception("解密私鑰為空, 無法解密");}try {Cipher cipher = Cipher.getInstance("RSA") ;cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] output = cipher.doFinal(cipherData);return new String(output);} catch (BadPaddingException e) {throw new Exception("私鑰解密失敗",e);} }

4、簽名和驗簽

  • 私鑰簽名
public static String sign (String signData, PrivateKey privateKey) throws Exception {byte[] keyBytes = privateKey.getEncoded();PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey key = keyFactory.generatePrivate(keySpec);Signature signature = Signature.getInstance("MD5withRSA");signature.initSign(key);signature.update(signData.getBytes());return printBase64Binary(signature.sign()); }
  • 公鑰驗簽
public static boolean verify(String srcData, PublicKey publicKey, String sign) throws Exception {byte[] keyBytes = publicKey.getEncoded();X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey key = keyFactory.generatePublic(keySpec);Signature signature = Signature.getInstance("MD5withRSA");signature.initVerify(key);signature.update(srcData.getBytes());return signature.verify(parseBase64Binary(sign)); }

5、編碼和解碼

/*** 字節數組轉字符*/ public static String printBase64Binary(byte[] bytes) {return DatatypeConverter.printBase64Binary(bytes); } /*** 字符轉字節數組*/ public static byte[] parseBase64Binary(String value) {return DatatypeConverter.parseBase64Binary(value); }

6、測試代碼塊

  • 密鑰生成測試
public static void testCreateKey () throws Exception {HashMap<String, String> map = RsaCryptUtil.getTheKeys();String privateKeyStr=map.get("privateKey");String publicKeyStr=map.get("publicKey");System.out.println("私鑰:"+privateKeyStr);System.out.println("公鑰:"+publicKeyStr);//消息發送方String originData="cicada-smile";System.out.println("原文:"+originData);String encryptData = RsaCryptUtil.encrypt(RsaCryptUtil.createPublicKey(publicKeyStr),originData.getBytes());System.out.println("加密:"+encryptData);//消息接收方String decryptData=RsaCryptUtil.decrypt(RsaCryptUtil.createPrivateKey(privateKeyStr),RsaCryptUtil.parseBase64Binary(encryptData));System.out.println("解密:"+decryptData); }
  • 密鑰讀取測試
public static void testReadKey () throws Exception {String value = getKey("rsaKey/public.key");System.out.println(value);String privateKeyStr = getKey(RsaCryptUtil.PRI_KEY) ;String publicKeyStr = getKey(RsaCryptUtil.PUB_KEY) ;//消息發送方String originData="cicada-smile";System.out.println("原文:"+originData);String encryptData = RsaCryptUtil.encrypt(RsaCryptUtil.createPublicKey(publicKeyStr),originData.getBytes());System.out.println("加密:"+encryptData);//消息接收方String decryptData=RsaCryptUtil.decrypt(RsaCryptUtil.createPrivateKey(privateKeyStr),RsaCryptUtil.parseBase64Binary(encryptData));System.out.println("解密:"+decryptData); }
  • 簽名驗簽測試
public static void testSignVerify () throws Exception {String signData = "cicada-smile" ;String privateKeyStr = getKey(RsaCryptUtil.PRI_KEY) ;String publicKeyStr = getKey(RsaCryptUtil.PUB_KEY) ;String signValue = sign(signData,RsaCryptUtil.createPrivateKey(privateKeyStr)) ;boolean flag = verify(signData,RsaCryptUtil.createPublicKey(publicKeyStr),signValue);System.out.println("原文:"+signData);System.out.println("簽名:"+signValue);System.out.println("驗簽:"+flag); }

四、源代碼地址

GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile

總結

以上是生活随笔為你收集整理的数据安全管理:RSA加密算法,签名验签流程详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本久道综合色婷婷五月 | 久草视频精品在线 | 国产一级免费av | 日韩精品在线电影 | 国产一区二区三区免费看 | 中文字幕一区二区三区不卡 | 黑人操亚洲美女 | 久久精品国产久精国产 | 日韩二级片 | 久久亚洲综合色图 | 69xxxx国产 | 91精品国产色综合久久不卡粉嫩 | 久久久www成人免费无遮挡大片 | 欧美色视频在线观看 | 欧洲一级黄色片 | 2018狠狠干 | 蜜桃91精品入口 | 极品白嫩丰满少妇无套 | av网址免费 | 日日躁夜夜躁狠狠躁 | 99精品久久久久久久婷婷 | 久热精品视频在线播放 | 欧美浓毛大泬视频 | 国产女人视频 | 少妇2做爰bd在线意大利堕落 | 国产黄色一级片视频 | 免费a级网站 | 深夜福利久久 | 91丨porny丨国产入口 | xxxx性视频| 高清国产mv在线观看 | 在线成人一区 | 丰满人妻一区二区 | 欧美性插动态图 | 日韩国产欧美综合 | 黄黄视频在线观看 | 成人午夜网站 | 巨骚综合 | 麻豆www | 国产亚洲综合精品 | 一级黄色在线 | 99在线观看免费 | 少妇一级淫片免费播放 | 欧美一区二区久久久 | 无遮挡又爽又刺激的视频 | 亚洲一区二区三区免费视频 | 农夫色综合 | 搡老熟女国产 | 国产成人77亚洲精品www | 国产午夜精品一区二区三区视频 | 99久久久| 啊v视频在线观看 | 国产吧在线 | 久久福利影视 | 久久综合色88 | 欧美成人dvd在线视频 | 午夜精品久久久久久久99老熟妇 | 欧美一区二区三区影院 | 丰满少妇aaaaaa爰片毛片 | 精品国产传媒 | 欧美贵妇videos办公室 | 国产91亚洲| 久久久久中文 | 亚洲18在线看污www麻豆 | 日韩在线高清 | 欧美成性色 | 日本一区二区三区视频在线 | caoporen超碰 | 亚洲视频一区二区三区四区 | 日本少妇喂奶漫画 | 欧美日韩一卡 | 久久尹人| 超碰在线免费公开 | 国产高潮视频在线观看 | 亚欧精品在线 | 欧美孕妇性xx | 超碰人人91 | 亚州| 女人喷潮完整视频 | 欧美亚洲精品在线观看 | yjizz国产| 一区二区视频国产 | 国产综合精品一区二区三区 | 免费日韩欧美 | 天天操天天干天天爱 | 欧美日韩黄色网 | 黄色在线网站 | 久久久资源网 | 伊人av综合 | 九色porny自拍视频 | 精品国产一区二区三区四区阿崩 | 免费看aaaaa级少淫片 | 午夜网站在线观看 | 欧美特黄色片 | 中文字幕亚洲一区 | 91成人在线 | 性少妇videosexfreexxx片 | 国产乱妇无码大片在线观看 | 免费在线播放av |