微服务实战系列之加密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
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/202480.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetCode 2925. 在树上执行操作以后得到的最大分数 + 正则难反 + 树形 DP

2925. 在树上执行操作以后得到的最大分数 - 力扣(LeetCode) 有一棵 n 个节点的无向树,节点编号为 0 到 n - 1 ,根节点编号为 0 。给你一个长度为 n - 1 的二维整数数组 edges 表示这棵树,其中 edges[i] [ai, bi] 表示…

浅谈能源智能管理系统在大学高校中的应用

安科瑞 华楠 摘要:结合深圳南方科技大学能效系统工程设计实例,针对校园中电耗、热量消耗、冷量消耗及水资源消耗数据的采集、传输、分析管理系统,分析了系统中的水、电、气在高校中的能耗分布,并阐述了节能应用方案,可…

「纯电」厮杀,广州车展的年末大戏

作者 |张祥威 编辑 |德新 年末的广州车展,揭开纯电动车激烈厮杀的一角。 1100多款车型亮相在这届车展,其中新能源车有460多辆,占接近一半比例。这其中,人们的焦点又放在十多款纯电车型上。 造车新势力中,理想的首款…

基于Python+TensorFlow+Django的交通标志识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 随着交通网络的不断扩展和智能交通系统的发展,交通标志的自动识别变得愈发重要。本项目旨在利用Python编…

micro_ros

原文链接Supported Hardware | micro-ROS Supported Hardware The main targets of micro-ROS are mid-range 32-bits microcontroller families. Usually, the minimum requirements for running micro-ROS in an embedded platform are memory constraints. Since memory u…

阿里云ECS服务器如何搭建并连接FTP,完整步骤

怎么用终端连接服务器就不多说了,直接开始搭建FTP。 我是用root账号执行的命令,如果不使用root账号,注意在命令前面加sudo。 一、安装FTP 我这里安装的是vsftpd。 1、检查是否已安装vsftpd: vsftpd -v如果出现了版本信息&…

Atlassian Confluence 路径遍历和命令执行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 Atlassian Confluence 6.14.2 版本之前存在一个未经授权的目录遍历漏洞,攻击者可以使用 Velocity 模板注入读取任意文件或执行任意命令。 漏洞环境及漏洞利用 启动docker环境…

【git】pip install git+https://github.com/xxx/xxx替换成本地下载编译安装解决网络超时问题

目录 🌑🌑 背景 🌒 🌒作用 🌔🌔 问题 🌔🌔解决方案 🌙方法一 🌙方法二 🌝🌝我的解决方案 整理不易,欢迎一键三连…

【硬核HeyGen平替】在window平台上使用MyHeyGen

最近在研究HeyGen的平替开源项目,然后发现了MyHeyGen这个项目,但是文档上面并没有说明如果在window平台上使用,考虑到非window平台安装显卡驱动什么的比较繁琐,所以尝试硬着头皮干... 前提 开源项目中所需的环境准备要先准备好 1…

轻松记录收支明细,一键打印,财务无忧!

作为现代人,管理好个人财务是非常重要的。但是,如何记录收支明细并打印出来呢?今天,我们向您推荐一款财务软件,帮助您轻松解决这个问题。 首先第一步,我们要打开【晨曦记账本】,并登录账号。 第…

神经网络训练技巧

1. 逐渐增加训练数据规模,比如先在小数据集上训练,之后再增大数据集继续训练。

安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器,可以在信号栏的右侧显示当前访问录音机和Camera的应用,点击后可以跳转到相应应用的权限界面,消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能,消费者…

电脑出现api-ms-win-crt-runtime-l1-1-0.dll丢失的情况有什么解决办法,dll文件丢失的方法

在使用电脑过程中,有时可能会遇到缺失api-ms-win-crt-runtime-l1-1-0.dll文件的问题,这可能导致某些应用程序无法正常运行。本文将介绍三种解决这个问题的方法,并比较它们的优缺点。 一.解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题 方…

Excel文件比较不再繁琐,xlCompare助您快速找出差异

概要 在现代职场中,Excel 已成为工作中不可或缺的利器。 在日常操作中,我们会遇到需要对两个或多个 Excel 文件进行比较的情况,此时,一款高效的 Excel 文件比较工具就显得尤为重要。 本文将为您介绍一款功能强大、优势明显的 Exc…

基于docker实现JMeter分布式压测

为什么需要分布式? 在工作中经常需要对一些关键接口做高QPS的压测,JMeter是由Java 语言开发,没创建一个线程(虚拟用户),JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…

在Spring Boot中使用Thymeleaf开发Web页面

引言: 为啥写这篇文章呢?我明明就没怎么用过这个Thymeleaf进行web开发,用JSP也行,三剑客也行,或者Vue,React,PHP等等,不好吗? 那我为啥写这篇博客呢?这个写了…

七天.NET 8操作SQLite入门到实战 - 第三天SQLite快速入门

前言 今天我们花费一个小时快速了解SQLite数据类型、SQLite常用命令和语法。 七天.NET 8操作SQLite入门到实战详细教程 第一天 SQLite 简介第二天 在 Windows 上配置 SQLite环境 EasySQLite项目源码地址 GitHub地址:https://github.com/YSGStudyHards/EasySQLite&…

spark shuffle 剖析

ShuffleExchangeExec private lazy val writeMetrics SQLShuffleWriteMetricsReporter.createShuffleWriteMetrics(sparkContext)private[sql] lazy val readMetrics SQLShuffleReadMetricsReporter.createShuffleReadMetrics(sparkContext)用在了两个地方,承接的是…

WorkPlus实现完全私有化部署,企业数据安全有保障

在这个信息化飞速发展的时代,企业正面临着越来越多的数据安全挑战。为了确保数据的安全性和隐私性,WorkPlus迎合市场需求,推出了完全私有化部署方案,为企业提供了全面、可靠的安全保障,成为企业移动办公的首选。 WorkP…

docker报错standard init linux.go:228 exec user process caused: exec format error

1、报错 使用Dockerfile自己做的服务镜像,docker run时启动失败,报错如下: standard init linux.go:228 exec user process caused: exec format error2、原因一 当前服务器的CPU架构和构建镜像时的CPU架构不兼容。比如做镜像是在arm机器下…