用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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;每个问题-答案对包含以下…