用RSA算法模擬類的適配器模式

“RAS算法”這個術語本身并不常見或標準,它可能指向兩個主要領域的不同概念,具體取決于上下文:

  1. 更可能是拼寫錯誤:指 RSA 算法(密碼學)
    • 這是最常見的情況。 “RAS” 極有可能是 “RSA” 的拼寫錯誤。
    • RSA 算法 是現代密碼學中最重要和最廣泛使用的公鑰加密算法之一。它由 Ron Rivest, Adi Shamir 和 Leonard Adleman 于 1977 年提出,因此得名。
    • 核心概念:
      • 非對稱加密: 使用一對密鑰:公鑰和私鑰。
      • 公鑰: 可以公開給任何人,用于加密消息或驗證數字簽名。
      • 私鑰: 必須嚴格保密,用于解密用對應公鑰加密的消息或創建數字簽名。
    • 工作原理基礎:
      • 密鑰生成:
        1. 選擇兩個非常大的、不同的質數 pq
        2. 計算模數 n = p * q
        3. 計算歐拉函數 φ(n) = (p-1) * (q-1)
        4. 選擇一個整數 e(公鑰指數),滿足 1 < e < φ(n)eφ(n) 互質(即 gcd(e, φ(n)) = 1)。
        5. 計算整數 d(私鑰指數),滿足 (d * e) ≡ 1 mod φ(n)。即 de 關于模 φ(n) 的模反元素。
        • 公鑰: (e, n)
        • 私鑰: (d, n)
      • 加密 (使用公鑰): 對于明文消息 M(轉換為小于 n 的整數),計算密文 C = M^e mod n
      • 解密 (使用私鑰): 對于密文 C,計算明文 M = C^d mod n
    • 安全性基礎: RSA 的安全性依賴于大整數分解難題。從公開的 n 推導出私鑰 d 需要分解 n 得到 pq。當 pq 是足夠大(例如 2048 位或更長)的質數時,分解 n 在計算上是不可行的(至少在經典計算機上是這樣)。
    • 應用:
      • 安全數據傳輸(如 HTTPS/SSL/TLS)
      • 數字簽名(驗證文件來源和完整性)
      • 軟件保護
      • 安全電子郵件 (PGP, S/MIME)
      • 區塊鏈和加密貨幣

source接口

/**
* @ClassName RAS加密算法 Source
* 待適配
* @Author ykx
* @Date 2024/5/8 8:44
* @Version 1.0
*/
@Data
public class RASUtil {/*** 公鑰*/public static PublicKey publicKey;/*** 私鑰*/public static PrivateKey privateKey;/*** 加密器*/public static Cipher cipher;public static final String RSA = "RSA";/*** 獲取公鑰和私鑰*/static {// 1.獲取公鑰私鑰KeyPairGenerator keyPairGen = null;// 獲取RSA算法實例try {// // 獲取RSA算法實例keyPairGen = KeyPairGenerator.getInstance(RSA);// 1024代表密鑰二進制位數keyPairGen.initialize(1024);// 產生KeyPair工廠KeyPair keyPair = keyPairGen.generateKeyPair();publicKey = keyPair.getPublic();privateKey = keyPair.getPrivate();cipher = Cipher.getInstance(RSA);} catch (Exception e) {e.printStackTrace();}}/*** 私鑰加密** @return 加密后的數據*/public byte[] privateEncode(String content) throws Exception {cipher.init(Cipher.ENCRYPT_MODE, privateKey);return cipher.doFinal(content.getBytes());}/*** 公鑰解密** @return 解密后的數據*/public String publicDecode(byte[] encodeContent) throws Exception {cipher.init(Cipher.DECRYPT_MODE, publicKey);byte[] decodeContent = cipher.doFinal(encodeContent);return new String(decodeContent);}}

目標接口:TargetAble

public interface TargetAble {/*** 私鑰加密** @return 加密后的數據*/byte[] privateEncode(String content) throws Exception;/*** 公鑰解密** @return 解密后的數據*/String publicDecode(byte[] encodeContent) throws Exception;/*** 公鑰加密** @return 加密后的數據*/byte[] publicEncode(String content) throws Exception;/*** 私鑰解密** @return 解密后的數據*/String privateDecode(byte[] encodeContent) throws Exception;/*** 加簽** @param bytes 加簽數據* @return 簽名后的結果*/String sign(byte[] bytes) throws Exception;/*** 驗簽** @param bytes* @return* @throws Exception*/Boolean verify(byte[] bytes, String sign) throws Exception;}

適配器:

@EqualsAndHashCode(callSuper = false)
@Data
public class Adapter extends RASUtil implements TargetAble {/*** 加簽*/public static Signature signature;public final static String SIGNATURE_ALGORITHM = "MD5withRSA";static {try {// 獲取簽名算法signature = Signature.getInstance(SIGNATURE_ALGORITHM);signature.initSign(privateKey);} catch (Exception e) {e.printStackTrace();}}/*** 公鑰加密** @param content* @return 加密后的數據*/@Overridepublic byte[] publicEncode(String content) throws Exception {RASUtil.cipher.init(Cipher.ENCRYPT_MODE, publicKey);return cipher.doFinal(content.getBytes());}/*** 私鑰解密** @param encodeContent* @return 解密后的數據*/@Overridepublic String privateDecode(byte[] encodeContent) throws Exception {cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decodeContent = cipher.doFinal(encodeContent);return new String(decodeContent);}/*** 加簽** @param bytes 加簽數據* @return 簽名后的結果*/@Overridepublic String sign(byte[] bytes) throws Exception {signature.update(bytes);return Base64.getEncoder().encodeToString(signature.sign());}/*** 驗簽** @param bytes* @return* @throws Exception*/@Overridepublic Boolean verify(byte[] bytes, String sign) throws Exception {signature.initVerify(publicKey);signature.update(bytes);return signature.verify(Base64.getDecoder().decode(sign));}
}

測試類:

public class Main {// Adapter RASUtil TargetAble 三個類組合的適配器為類的適配器模式public static void main(String[] args) throws Exception {TargetAble targetAble = new Adapter();String content = "學習算法,有益身心健康!!";// 公鑰加密,私鑰解密byte[] publicEncode = targetAble.publicEncode(content);System.out.println("公鑰加密:" + Base64.getEncoder().encodeToString(publicEncode));System.out.println("私鑰解密:" + targetAble.privateDecode(publicEncode));// 私鑰加密,公鑰解密byte[] privateEncode = targetAble.privateEncode(content);System.out.println("私鑰加密:" + Base64.getEncoder().encodeToString(privateEncode));System.out.println("公鑰解密:" + targetAble.publicDecode(privateEncode));// 加簽String sign = targetAble.sign(content.getBytes());System.out.println("加簽后:" + sign);// 驗簽Boolean verify = targetAble.verify(content.getBytes(), sign);System.out.println("驗簽結果:" + verify);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/85463.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/85463.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/85463.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CARSIM-與C#自動化測試方案

using System; using System.Runtime.InteropServices; using System.Collections.Generic;namespace CarSimAutomation {/// <summary>/// CarSim COM 自動化測試接口/// 封裝所有 CarSim COM 功能用于自動化測試/// </summary>[ComVisible(true)][ClassInterface…

企微CRM系統中的任務分配與效率提升技巧

在數字化管理時代&#xff0c;企業微信(企微)與CRM系統的深度融合&#xff0c;為企業提供了更高效的客戶管理與團隊協作方案。企微CRM軟件不僅整合了客戶溝通、銷售跟進、數據分析等功能&#xff0c;還能通過智能任務分配優化團隊效率。本文將深入探討企微CRM管理系統的任務分配…

day66—BFS—最短的橋(LeetCode-934)

題目描述 給你一個大小為 n x n 的二元矩陣 grid &#xff0c;其中 1 表示陸地&#xff0c;0 表示水域。 島 是由四面相連的 1 形成的一個最大組&#xff0c;即不會與非組內的任何其他 1 相連。grid 中 恰好存在兩座島 。 你可以將任意數量的 0 變為 1 &#xff0c;以使兩座…

FramePack 安裝指南(中文)

FramePack 安裝指南&#xff08;中文&#xff09; -Windows FramePack 是最前沿的 AI 視頻生成框架&#xff0c;以極小的硬件需求顛覆視頻創作&#xff01;它能在僅 6GB 筆記本 GPU 內存上&#xff0c;驅動 13B 模型以 30 FPS 生成超長 120 秒視頻&#xff0c;幾乎無內容限制&…

Redis Sentinel 非集群模式高可用部署指南

1. Sentinel 在非集群模式的定位 一句話&#xff1a;在單主多從架構中&#xff0c;用 Sentinel 替你盯哨——探測故障、選舉新主、通知客戶端。 核心四職能&#xff1a; 職能作用點Monitoring定時 PING 主從&#xff0c;自身也互相探測Notification通過日志/PubSub/外部調用報…

2025Java面試八股文

文章目錄 Java基礎JVM多線程SpringSpring Boot數據庫與SQL分布式系統其他 Java基礎 自動裝箱與拆箱&#xff1a;Java中基礎數據類型與包裝類之間的轉換。例如&#xff0c;Integer x 1; 是裝箱&#xff0c;int y x; 是拆箱。Object類常用方法&#xff1a;如clone()、getClass…

寶塔安裝nginx-rtmp,音視頻直播

前置&#xff1a;需要自己開發音視頻直播&#xff0c; 注意不是實時音視頻&#xff0c;不是一對一視頻聊天&#xff0c;不是視頻會議 方案有 srs &#xff0c;nginx-rtmp&#xff0c;live555&#xff0c;node-media-server&#xff0c;EasyDarwin等 今天是說 nginx-rtmp 怎么…

基于微信小程序和深度學習的寵物照片拍攝指導平臺的設計與實現

文章目錄 摘要前言緒論1. 課題背景2. 國內外現狀與趨勢2.1 國內研究現狀2.2 國外研究現狀2.3 發展趨勢3. 課題內容相關技術與方法介紹1. 微信小程序開發技術2. 深度學習模型選型2.1 MobileNetV22.2 ResNet-503. 系統架構設計4. 關鍵技術實現4.1 實時拍攝指導4.2 多模態建議生成…

web布局02

Web 發展的每個不同時期都有新的技術為 Web 布局提供支持&#xff0c;但不管是哪個時期&#xff0c;Web 布局相關的概念和術語都是相同的。如果你想徹底或者更好地掌握 Web 布局&#xff0c;那么首先需要對 Web 布局相關的技術術語有所了解。 在這一節中&#xff0c;我們一起來…

Mac電腦 窗口分屏管理 Magnet Pro

Magnet Pro Mac&#xff0c;是一款功能強大的窗口分屏管理工具&#xff0c;具有多種布局模式、窗口布局功能和其他工具&#xff0c;可以幫助您高效地進行多任務處理和管理工作。 拖動窗口到邊緣&#xff0c;可將窗口大小調整到屏幕的一半。拖動窗口到角落&#xff0c;可將窗口…

http2與websocket關系

HTTP/2 和 WebSocket 協議本身確實不兼容&#xff0c;不能像在 HTTP/1.1 中那樣用標準 WebSocket 協議&#xff08;ws:// / wss://&#xff09;進行升級握手。但這事兒細節比較多&#xff0c;下面詳細講講&#xff1a; ? HTTP/2 與 WebSocket 的關系 HTTP/2 不直接支持 WebSo…

LoRA 與 CoT 沖突嗎

對于一個具有CoT 能力的模型來說&#xff0c;采用普通的數據對其進行LoRA 微調可能會使原模型丟失CoT 能力&#xff0c;從而我們進行思考如下 CoT 與 LoRA 的“沖突”理解 目標不完全一致 導致的效果優化方向&#xff1a; CoT 側重于提高推理能力和可解釋性&#xff0c;它鼓勵…

Python爬蟲-爬取票牛明星演唱會數據,進行數據分析

前言 本文是該專欄的第61篇,后面會持續分享python爬蟲干貨知識,記得關注。 本文,筆者以“票牛”平臺為例。基于Python爬蟲,采集“票牛”平臺的明星演唱會(包含“演出城市,演出票價,演出時間”等等)的數據。 廢話不多說,具體實現思路和詳細邏輯,筆者將在正文結合完整…

uniapp的video遮蓋了popup

video的默認層級太高&#xff0c;導致popup彈出的時候&#xff0c;部分被video遮擋了 可以利用cover-view&#xff0c;將popup以及內部所有的標簽&#xff0c;全都換成cover-view&#xff0c;然后用一個變量控制其顯隱 比如原始&#xff1a; 現在&#xff1a;

java面試題02訪問修飾符有哪些?區別是什么?

訪問修飾符是面向對象編程中實現封裝的核心機制&#xff0c;用于控制類、屬性、方法等成員的可見性&#xff08;可訪問范圍&#xff09;。不同的訪問修飾符決定了其他類或代碼在何處可以訪問這些成員。 主要的訪問修飾符及其區別如下&#xff08;以 Java 和 C# 為代表&#xf…

在小程序中實現上下左右拖動表格

在小程序的開發中&#xff0c;不可避免會出現上下左右拖動表格的類似需求&#xff0c;下面將把這個簡單實現一下 其中主要使用到了overflow: scroll;來使得橫向和縱向可以滾動&#xff0c;并且使用負邊距 父容器截斷的方法來同時隱藏橫向和縱向滾動條&#xff0c;從而實現該效…

[MSPM0開發]之九 MSPM0G3507的ADC

[MSPM0開發]之九 MSPM0G3507的ADC 一、 MSPM0G3507 ADC概述二、 MSPM0G3507 ADC系統框圖2.1 電壓基準2.2 分辨率2.3 硬件均值計算2.4 采樣觸發源和采樣模式2.5 轉換模式2.6 轉換結果數據格式2.7 高級特性2.7.1 非FIFO模式下的ADC操作&#xff08;單次轉換和重復單次轉換&#x…

門鎖開關;與我們生活中緊密聯系!

門鎖開關作為日常生活的核心安全組件&#xff0c;其設計與應用直接影響家居安全、使用便捷性及設備壽命&#xff0c;以下是其關鍵價值與技術要點的系統分析&#xff1a; &#x1f512; ?一、基礎功能&#xff1a;安全與便利的平衡? ?物理防護核心? ?鎖體結構?&#xff1…

WRF-Hydro分布式水文模型:洪水預報、水資源管理與規劃、生態水文研究、氣候變化影響評估、流域綜合管理、水電工程規劃與運行

目錄 第一部分&#xff1a;WRF-Hydro模型功能及運行流程、依賴庫準備 第二部分&#xff1a;WRF-Hydro模式編譯、離線運行及案例實踐 第三部分&#xff1a;結合多案例進行模式數據制備及實踐應用 【內容簡述】&#xff1a; WRF-Hydro模型是一個分布式水文模型&#xff0c;?…

OCRBench:評估多模態大模型的OCR能力

論文地址&#xff1a;OCRBench: On The Hidden Mystery of OCR In Large Multimodal Models&#xff1a;2305.07895 OCRBench在10個文本相關任務上測評多模態大模型&#xff08;LMM&#xff09;的OCR能力&#xff0c;包含1000個問題-答案對&#xff0c;每個問題-答案對包含以下…