当前位置: 首页 > news >正文

微服务实战系列之加密RSA

前言

在这个时代,我们选择的人生目标已丰富多彩,秉持的人生态度也千差万别:
除了吃喝玩乐,还有科技探索;
除了CityWalk,还有“BookWalk”
除了走遍中国,还有走遍世界;
凡此种种选择和坚持,都是为了播下一粒种子,期望一树梨花。

好了,我们暂且按下其他不表,言归正传。
“微服务实战系列”中,博主已完成了以下组件的介绍:

  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway

此时,博主不禁灵机一动,发起灵魂一问:
当我们希望跨时空沟通,又要防止别人偷窥干扰,应该怎么办?
显然以上4个组件不符合要求,自然望洋兴叹、无能为力。奈何博主也身不怀绝技,自觉闷闷不乐中…

那到底怎么办呢?当然有问题就有办法,欢迎今天的主人公闪亮登场:RSA


在正式掌握RSA之前,我们先了解一下密码学中的基本概念和常用术语。

一、密码学

密码学(在西欧语文中,源于希腊语kryptós“隐藏的”,和gráphein“书写”)是研究如何隐密地传递信息的学科。在现代特别指对信息以及其传输的数学性研究,常被认为是数学和计算机科学的分支,和信息论也密切相关。著名的密码学者Ron Rivest解释道:“密码学是关于如何在敌人存在的环境中通讯”,自工程学的角度,这相当于密码学与纯数学的异同。密码学是信息安全等相关议题,如认证、访问控制的核心。密码学的首要目的是隐藏信息的涵义,并不是隐藏信息的存在。密码学也促进了计算机科学,特别是在于电脑与网络安全所使用的技术,如访问控制与信息的机密性。密码学已被应用在日常生活:包括自动柜员机的芯片卡、电脑使用者存取密码、电子商务等等。
密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。

1. 安全标准
  • 信息的保密性 Confidentiality:
    防止信息泄漏给未经授权的人(加密解密技术);
  • 信息的完整性 Integrity:
    防止信息被未经授权的篡改(消息认证码,数字签名);
  • 认证性 Authentication:
    保证信息来自正确的发送者(消息认证码,数字签名);
  • 不可否认性 Non-repudiation:
    保证发送者不能否认他们已发送的消息(数字签名);
2. 基本术语
  • 密钥:分为加密密钥和解密密钥。
  • 明文:没有进行加密,能够直接代表原文含义的信息。
  • 密文:经过加密处理处理之后,隐藏原文含义的信息。
  • 加密:将明文转换成密文的实施过程。
  • 解密:将密文转换成明文的实施过程。
  • 密码算法:密码系统采用的加密方法和解密方法,随着基于数学密码技术的发展,加密方法一般称为加密算法,解密方法一般称为解密算法。
  • 加密(encryption)算法:将普通信息(明文,plaintext)转换成难以理解的资料(密文,ciphertext)的过程;
  • 解密(decryption)算法则是其相反的过程:由密文转换回明文;加解密包含了这两种算法,一般加密即同时指称加密(encrypt或encipher)与解密(decrypt或decipher)的技术。

在这里插入图片描述

二、RSA

初步学习了密码学的基本知识后,接下来,我们该谈谈今天的主人公——RSA了。
不过博主今天不谈数论,不谈公式,只带着各位盆友了解RSA是怎么理论联系实际的。

1. 名词解释

RSA:一般指RSA加密算法。RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。

这里提到一个关键的词:非对称加密算法。这是个什么东东?继续名词解释。

公钥加密,也叫非对称(密钥)加密(public key encryption),属于网络安全二级学科,指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。
它解决了密钥的发布和管理问题,是商业密码的核心。在公钥加密体制中,没有公开的是私钥,公开的是公钥。

纵观以上定义,我们发现RSA原来是靠一组密钥对在工作。
简言之,公钥即public key,可以公开的密钥;私钥即private key,不可公开的密钥。

2. 工作原理

首先,在RSA的世界里,请记住一个口诀:公钥加密,私钥解密。请看以下大屏幕:
在这里插入图片描述
由乙方(可以理解为密钥对创建人),私钥自己保管,公钥向甲方开放。
当甲方需要向乙方传输消息时,可以使用乙方提供的公钥进行加密,如此便可防止“偷窥者”干扰,进而避免敏感数据泄密。乙方收到消息后,可以使用自己保管的私钥进行解密,实现数据利用。

3. 实际应用

在我们实际应用场景中,大致分几步完成RSA的加密和解密。

3.1 创建密钥对KeyPair
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
//初始化
keyPairGenerator.initialize(1024);//RSA默认长度,推荐至少>=1024
//获取密钥对
KeyPair keyPair = keyPairGenerator.generateKeyPair();
3.2 获取公钥publicKey
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
3.3 获取私钥privateKey
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
3.4 加密
public static String encrypt(String data, PublicKey publicKey) throws Exception {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);int inputLen = data.getBytes().length;ByteArrayOutputStream out = new ByteArrayOutputStream();int offset = 0;byte[] cache;int i = 0;// 对数据分段加密while (inputLen - offset > 0) {if (inputLen - offset > 117) {cache = cipher.doFinal(data.getBytes(), offset, 117);} else {cache = cipher.doFinal(data.getBytes(), offset, inputLen - offset);}out.write(cache, 0, cache.length);i++;offset = i * 117;}byte[] encryptedData = out.toByteArray();out.close();// 加密后的字符串,并以UTF-8为标准转化成字符串return new String(Base64.encodeBase64Str(encryptedData));}
3.5 解密
public static String decrypt(String data, PrivateKey privateKey) throws Exception {Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] dataBytes = Base64.decode(data);int inputLen = dataBytes.length;ByteArrayOutputStream out = new ByteArrayOutputStream();int offset = 0;byte[] cache;int i = 0;// 对数据分段解密while (inputLen - offset > 0) {if (inputLen - offset > 128) {cache = cipher.doFinal(dataBytes, offset, 128);} else {cache = cipher.doFinal(dataBytes, offset, inputLen - offset);}out.write(cache, 0, cache.length);i++;offset = i * 128;}byte[] decryptedData = out.toByteArray();out.close();// 解密后的内容 return new String(decryptedData, "UTF-8");}

综上,关于如何使用RSA加密算法进行数据传输,已完成相关介绍,希望有助于各位盆友理解并学会如何使用它。


结语

通过以上叙述,期望各位盆友可以一文学会如何使用RSA加密和解密。当然RSA绝技显然不止于此。让我们一步一步走向胜利,享受知识带来的快乐吧!GoodNight
在这里插入图片描述

相关文章:

微服务实战系列之加密RSA

前言 在这个时代,我们选择的人生目标已丰富多彩,秉持的人生态度也千差万别: 除了吃喝玩乐,还有科技探索; 除了CityWalk,还有“BookWalk”; 除了走遍中国,还有走遍世界; …...

Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ?

环境: Centos7.9 问题描述: Centos 里面为什么有的磁盘命名/dev/vda 有的是/dev/sda ? 解决方案: 1.盘命名为/dev/vda或/dev/sda的差异主要取决于系统的安装方式和硬件架构。 /dev/sda是传统的磁盘命名方案,用于标识IDE、S…...

P9232 [蓝桥杯 2023 省 A] 更小的数(区间DP)

求大数字某连续部分反转后&#xff0c;比原数字小的个数 思路&#xff1a;自前向后遍历 ai是位于数字第i位的数字 aj是位于数字第j位的数字&#xff08;i<j&#xff09; ai>aj f[ai][aj]1; ai<aj f[ai][aj]0; aiaj f[ai][aj]f…...

【ArcGIS Pro二次开发】(77):ArcGIS Pro中图层的获取与解析

一、最简单的获取图层方式 通常情况下&#xff0c;如果要获取当前地图中的图层&#xff0c;可以用2种方法获取。 以下图为例&#xff1a; 一种是【map.Layers】属性获取&#xff0c;结果如下&#xff1a; 可以看出&#xff0c;这里只获取到了第一层级的图层&#xff0c;图层组…...

Robust Optimization, imperfect CSI, CSIT and CSIR

文章目录 写在前面CSI, CSIT and CSIR 写在前面 CSIT或者CSIR可不可以用来帮助实现隐蔽通信 人工噪声让窃听者估计出错误的信道。 CSI, CSIT and CSIR MIMO Minimum Total MSE Transceiver Design With Imperfect CSI at Both Ends 2009 TSP 多输入多输出 (MIMO) 系统已成为…...

【数据结构】栈详解

目录 1. 前言2. 栈2.1 栈的概念及结构2.2 如何实现栈2.3 数组栈实现2.3.1 top怎么确定2.3.2 栈顶插入2.3.2.1 栈顶插入分析2.3.2.2 栈顶插入代码实现 2.3.3 栈顶删除2.3.4 判空2.3.4.1 分析2.3.4.2 代码实现 2.3.5 栈的元素个数2.3.6 栈销毁2.3.7 栈访问数据 3. 源代码3.1 Stac…...

大结局!OpenAI创始人奥特曼和 Greg Brockman 将加入微软!!!

持续48小时的OpenAI政变大戏终于迎来了大结局&#xff01; 微软堪称最大赢家&#x1f4a5;&#x1f4a5;&#x1f4a5; 微软CEO刚刚宣布&#xff1a; 我们仍然致力于与 OpenAI 的合作伙伴关系&#xff0c;并对我们的产品路线图、我们在 Microsoft Ignite 上宣布的一切继续创…...

Linux QT交叉编译环境安装

参考链接 linux交叉编译Qt_linux qt 交叉编译-CSDN博客 关键点&#xff1a;编译脚本&#xff0c;放在qt源代码根目录的.sh文件 #!/bin/shcd ./qt-everywhere-src-5.12.9./configure -prefix /home/qsqya/compile/qt5.12.9/build \ -opensource \ -release \ -confirm-license…...

媲美有线操作,支持4KHz响应和无线充电的游戏鼠标,雷柏VT3S上手

对于无线鼠标来说&#xff0c;操作延迟和精度对游戏操作影响很大&#xff0c;常见的游戏鼠标至少都有1KHz的回报率&#xff0c;而雷柏今年已经出了很多支持4KHz回报的鼠标了&#xff0c;像是我现在用的这款VT3S游戏鼠标&#xff0c;就搭载了旗舰级的原相3395引擎&#xff0c;支…...

【Flask使用】全知识md文档,4大部分60页第3篇:状态cookie和session保持

本文的主要内容&#xff1a;flask视图&路由、虚拟环境安装、路由各种定义、状态保持、cookie、session、模板基本使用、过滤器&自定义过滤器、模板代码复用&#xff1a;宏、继承/包含、模板中特有变量和函数、Flask-WTF 表单、CSRF、数据库操作、ORM、Flask-SQLAlchemy…...

类方法,静态方法和实例方法的区别及应用场景

在 Python 中&#xff0c;有三种不同类型的方法&#xff1a;实例方法、类方法和静态方法。它们各自有不同的特点和应用场景&#xff1a; 实例方法&#xff08;Instance Method&#xff09;&#xff1a; 实例方法是最常见的方法类型&#xff0c;在方法定义中第一个参数通常被命…...

CleanMyMac X4.16免费版mac电脑一键清理电脑垃圾工具

但是&#xff0c;我最近发现随着使用时间的增加&#xff0c;一些奇奇怪怪的文件开始占据有限的磁盘空间&#xff0c;存储空间变得越来越小&#xff0c;系统占用空间越来越大&#xff0c;越来越多的无效文件开始影响我电脑的运行速度。 Mac的文件管理方式和Windows不太一样&…...

汽车级低压差稳压器LDO LM317BD2TR4G原理、参数及应用

LM317BD2TR4G主要功能特性分析 &#xff1a; LM317BD2TR4G 低漏 (LDO) 线性电压稳压器是一款可调 3 端子正向 LDO 电压器&#xff0c;能够在 1.2 V 至 37 V 的输出电压范围内提供 1.5 A 以上的电流。此电压稳压器使用非常简便&#xff0c;仅需两个外部电阻即可设置输出电压。另…...

多对多的创建方式与Ajax

模型层补充 MTV与MVC模型 MTV 全称 Models Templates Views 模型模板视图 MVC 全称 Models Views Controller 模型视图控制MTV: Django号称是MTV模型 MVC: 其实django本质也是MVC 拓展: vue框架:MVVM模型choices参数(数据库字段设计常见) choices使用 class User(models.Mod…...

【Linux网络】详解使用http和ftp搭建yum仓库,以及yum网络源优化

目录 一、回顾yum的原理 1.1yum简介 yum安装的底层原理&#xff1a; yum的好处&#xff1a; 二、学习yum的配置文件及命令 1、yum的配置文件 2、yum的相关命令详解 3、yum的命令相关案例 三、搭建yum仓库的方式 1、本地yum仓库建立 2、通过http搭建内网的yum仓库 3、…...

算法设计与分析算法实现——动态规划最大子段

输入&#xff1a;整数序列a1,a2,…,an 输出&#xff1a;序列的一个子段&#xff0c;其和Σak最大 注意&#xff1a;当所有整数都为负数时&#xff0c;定义最大子段和为0 使用动态规划&#xff0c;输入数组是a[n]&#xff1b; 状态转移方程dp[i]max(dp[i-1]a[i],a[i])——这个状…...

JavaWeb-JVM内存管理机制

JavaWeb-JVM内存管理机制 一、JVM内存管理概述1.1 什么是JVM内存管理1.2 物理内存与虚拟内存1.3 内核空间与用户空间二、java中哪些组建需要使用内存2.1 Java堆2.2 线程2.3 类和类加速器2.4 NIO2.5 JNI三、JVM内存结构3.1 PC寄存器3.2 Java栈3.3 堆3.4 方法区3.5 运行时常量池3…...

阿里云oss存储文件上传功能实现(保姆级教程)

先登录&#xff1a; 点击进入控制台 点击左上角导航栏按钮 搜索oss&#xff0c;点击进入 进入之后点击立即开通oss按钮&#xff0c;开通之后点击下图立即创建&#xff0c;弹出创建Bucket 填上Bucket名称&#xff0c;读写权限改为公共读。其他不变点击确定创建&#xff0c;完成…...

centos7配置 局域网自动解析hostname

这样可以让局域网别的电脑直接通过hostname来连接这台电脑。 如果不是windows系统&#xff0c;可以用hostname.local来连接 主要是用到了mdns的功能&#xff0c;需要安装nss-mdns。 vmware下nat模式下&#xff0c;宿主机也可以通过连接hostname使用。 yum install epel-releas…...

wireshark 过滤设置

gpt: Wireshark 是一个网络分析工具&#xff0c;可以用来捕获和分析网络数据包。你可以使用过滤器来筛选并查看你感兴趣的数据包。Wireshark 使用的是基于BPF&#xff08;Berkeley Packet Filter&#xff09;语法的过滤器。以下是一些常见的 Wireshark 过滤器设置&#xff1a;…...

CST微波工作室新手避坑指南:从Brick建模到材料库调用的5个实用技巧

CST微波工作室新手避坑指南&#xff1a;从Brick建模到材料库调用的5个实用技巧 刚接触CST微波工作室的工程师或学生&#xff0c;往往会被其强大的功能和复杂的界面所震撼。作为一款专业的电磁场仿真软件&#xff0c;CST在微波器件设计、天线分析等领域有着广泛应用。但正是由于…...

专业水果包装设计公司排名榜推荐:生鲜农产品高端水果礼盒包装首选哲仕、正邦、东道

专业水果包装设计公司排名榜推荐&#xff1a;生鲜农产品高端水果礼盒包装首选哲仕、正邦、东道现在生鲜水果行业竞争激烈&#xff0c;国产时令水果、进口精品水果、产地地标农产品同质化严重。很多水果产地货源优质、口感出众、种植标准高&#xff0c;却因为包装简陋、没有辨识…...

悬空的语言:大语言模型与人类对“理解“的本质差异

大语言模型能说出正确的答案&#xff0c;却不知道自己为什么对。人能感受到苹果的重量&#xff0c;才真正懂得"苹果会落下"。这一行字的距离&#xff0c;是人与机器之间最深的鸿沟。一、从一句话开始"桌上有个苹果。"当你读到这句话&#xff0c;脑海里浮现…...

不止是U盘!用小米手机OTG连接键盘鼠标,秒变移动办公小电脑(含Type-C线选购指南)

小米手机OTG功能全攻略&#xff1a;从移动办公到娱乐扩展的终极指南 你是否曾经在咖啡馆临时需要修改文档&#xff0c;却苦于手机触屏输入效率低下&#xff1f;或是出差途中急需从U盘读取一份重要合同&#xff0c;却找不到电脑&#xff1f;小米手机的OTG功能或许能成为你的移动…...

ChatGPTBox:浏览器AI侧边栏插件部署与效率提升实战指南

1. 项目概述与核心价值最近在折腾浏览器插件&#xff0c;发现一个叫 ChatGPTBox 的开源项目挺有意思。简单来说&#xff0c;它不是一个独立的聊天机器人&#xff0c;而是一个功能强大的浏览器侧边栏工具。你可以把它理解为一个“瑞士军刀”&#xff0c;把各种主流AI模型&#x…...

SRCT模型:随机共振耦合阈值原理与应用解析

1. SRCT模型基础解析 SRCT&#xff08;Stochastic Resonance Coupled Threshold&#xff09;模型是近年来非线性动力学领域的重要研究方向&#xff0c;它通过引入随机激励与阈值耦合机制&#xff0c;为复杂系统的临界行为分析提供了新的数学工具。我在研究电网稳定性问题时首次…...

开发者技能提升计划:从算法到系统设计的全栈能力构建

1. 项目概述&#xff1a;一个面向开发者的“复仇者”技能提升计划最近在GitHub上看到一个挺有意思的项目&#xff0c;叫ProSkillsMD/avenger-initiative。光看名字&#xff0c;一股“复仇者联盟”的既视感扑面而来&#xff0c;让人好奇这葫芦里到底卖的什么药。点进去一看&…...

Node.js终端Canvas渲染引擎:构建交互式TUI应用与数据可视化

1. 项目概述&#xff1a;在终端里“画”出交互式应用 如果你和我一样&#xff0c;常年与终端&#xff08;Terminal&#xff09;打交道&#xff0c;可能会觉得那些黑底白字的命令行界面虽然高效&#xff0c;但总少了点“生气”。无论是系统监控、日志查看&#xff0c;还是简单的…...

VS Code代码隐私守护插件repo-cloak:敏感信息混淆与安全分享实践

1. 项目概述&#xff1a;一个为开发者打造的代码隐私守护工具最近在逛GitHub的时候&#xff0c;发现了一个挺有意思的项目&#xff0c;叫repo-cloak-vs-code。光看名字&#xff0c;你可能会有点懵&#xff0c;“repo-cloak”是啥&#xff1f;给仓库穿隐身衣吗&#xff1f;没错&…...

【1人公司】【自研】上架可收款的微信小程序全流程

上架可收款的微信小程序全流程小编初心小编背景步骤✅腾讯的WorkBuddy写一整个前端后端数据库项目安装项目代码运行所需的环境&#xff08;如下&#xff09;内网穿透&#xff0c;让公网上的人能访问我的前端服务和后端服务 [Cpolar](https://www.cpolar.com)✅微信认证-想要他人…...