RSA之前端加密后端解密

RSA之前端加密后端解密

RSA加密解密方式有:
(1)公钥加密,私钥解密;
(2)私钥加密,公钥解密;
此文章中以下我使用的是前端公钥加密,后端私钥解密

秘钥对生成

http://web.chacuo.net/netrsakeypair
生成对应的公钥和私钥
在这里插入图片描述

前端公钥加密

前端加密js文件
链接: https://pan.baidu.com/s/1NIMayTcmjbMOf7BqPhPQoA 提取码: t7an
下载js文件并引入

<script th:src="@{/js/jsencrypt.min.js}"></script>
<script type="text/javascript">
function rsaPassword() {var encryptor = new JSEncrypt();encryptor.setPublicKey('公钥字符串'); // 设置公钥var rsaPassword=encryptor.encrypt('要加密的字符串');
}
</script>

后端私钥解密

示例

String encryptPassword=RsaUtil.encryptByPublicKey("要加密的字符串","公钥字符串");
System.out.println("加密:"+encryptPassword);
String decryptPassword=RsaUtil.decryptByPrivateKey(encryptPassword,"私钥字符串");
System.out.println("解密:"+decryptPassword);

后端加解密工具类

import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;/*** @author 初颜sir*/
public class RsaUtil {//签名算法名称private static final String RSA_KEY_ALGORITHM = "RSA";//RSA密钥长度,默认密钥长度是1024,密钥长度必须是64的倍数,在512到65536位之间,不管是RSA还是RSA2长度推荐使用2048private static final int KEY_SIZE = 2048;/*** 公钥加密(用于数据加密)** @param data         加密前的字符串* @param publicKeyStr base64编码后的公钥* @return base64编码后的字符串* @throws Exception*/public static String encryptByPublicKey(String data, String publicKeyStr) throws Exception {//Java原生base64解码byte[] pubKey = Base64.getDecoder().decode(publicKeyStr);//创建X509编码密钥规范X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKey);//返回转换指定算法的KeyFactory对象KeyFactory keyFactory = KeyFactory.getInstance(RSA_KEY_ALGORITHM);//根据X509编码密钥规范产生公钥对象PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);//根据转换的名称获取密码对象Cipher(转换的名称:算法/工作模式/填充模式)Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());//用公钥初始化此Cipher对象(加密模式)cipher.init(Cipher.ENCRYPT_MODE, publicKey);//对数据加密byte[] encrypt = cipher.doFinal(data.getBytes());//返回base64编码后的字符串return Base64.getEncoder().encodeToString(encrypt);}/*** 私钥解密(用于数据解密)** @param data          解密前的字符串* @param privateKeyStr 私钥* @return 解密后的字符串* @throws Exception*/public static String decryptByPrivateKey(String data, String privateKeyStr) throws Exception {//Java原生base64解码byte[] priKey = Base64.getDecoder().decode(privateKeyStr);//创建PKCS8编码密钥规范PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKey);//返回转换指定算法的KeyFactory对象KeyFactory keyFactory = KeyFactory.getInstance(RSA_KEY_ALGORITHM);//根据PKCS8编码密钥规范产生私钥对象PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);//根据转换的名称获取密码对象Cipher(转换的名称:算法/工作模式/填充模式)Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());//用私钥初始化此Cipher对象(解密模式)cipher.init(Cipher.DECRYPT_MODE, privateKey);//对数据解密byte[] decrypt = cipher.doFinal(Base64.getDecoder().decode(data));//返回字符串return new String(decrypt);}/*** 私钥加密(用于数据签名)** @param data          加密前的字符串* @param privateKeyStr base64编码后的私钥* @return base64编码后后的字符串* @throws Exception*/public static String encryptByPrivateKey(String data, String privateKeyStr) throws Exception {//Java原生base64解码byte[] priKey = Base64.getDecoder().decode(privateKeyStr);//创建PKCS8编码密钥规范PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(priKey);//返回转换指定算法的KeyFactory对象KeyFactory keyFactory = KeyFactory.getInstance(RSA_KEY_ALGORITHM);//根据PKCS8编码密钥规范产生私钥对象PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);//根据转换的名称获取密码对象Cipher(转换的名称:算法/工作模式/填充模式)Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());//用私钥初始化此Cipher对象(加密模式)cipher.init(Cipher.ENCRYPT_MODE, privateKey);//对数据加密byte[] encrypt = cipher.doFinal(data.getBytes());//返回base64编码后的字符串return Base64.getEncoder().encodeToString(encrypt);}/*** 公钥解密(用于数据验签)** @param data         解密前的字符串* @param publicKeyStr base64编码后的公钥* @return 解密后的字符串* @throws Exception*/public static String decryptByPublicKey(String data, String publicKeyStr) throws Exception {//Java原生base64解码byte[] pubKey = Base64.getDecoder().decode(publicKeyStr);//创建X509编码密钥规范X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(pubKey);//返回转换指定算法的KeyFactory对象KeyFactory keyFactory = KeyFactory.getInstance(RSA_KEY_ALGORITHM);//根据X509编码密钥规范产生公钥对象PublicKey publicKey = keyFactory.generatePublic(x509KeySpec);//根据转换的名称获取密码对象Cipher(转换的名称:算法/工作模式/填充模式)Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());//用公钥初始化此Cipher对象(解密模式)cipher.init(Cipher.DECRYPT_MODE, publicKey);//对数据解密byte[] decrypt = cipher.doFinal(Base64.getDecoder().decode(data));//返回字符串return new String(decrypt);}}

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

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

相关文章

【点云配准】【深度学习】Windows11下PCRNet代码Pytorch实现与源码讲解

【点云配准】【深度学习】Windows11下PCRNet代码Pytorch实现与源码讲解 提示:最近开始在【点云配准】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【点云配准】【深度学习】Windows11下PCRNet代码Pytorch实现与源码讲解前言PCRNet模型运行环境…

Linux内核解读

来自鹅厂架构师 作者&#xff1a;aurelianliu 工作过程中遇到的调度、内存、文件、网络等可以参考。 1.os运行态 X86架构&#xff0c;用户态运行在ring3&#xff0c;内核态运行在ring0&#xff0c;两个特权等级。 &#xff08;1&#xff09;内核、一些特权指令&#xff0c;例…

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…

人工智能_PIP3安装使用国内镜像源_安装GIT_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_002---人工智能工作笔记0097

接着上一节来看,可以看到,这里 创建软连接以后 [root@localhost Python-3.10.8]# ln -s /usr/local/python3/bin/python3 /usr/bin/python3 [root@localhost Python-3.10.8]# python3 -V Python 3.10.8 [root@localhost Python-3.10.8]# pwd /usr/local/Python-3.10.8 [root@…

Vue26 内置标签 v-text v-html

实例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>v-text指令</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js"></script></head><…

第一件事 什么是 Java 虚拟机 (JVM)

1、什么是虚拟机&#xff1f; - 这个其实是一个挺逗的事情&#xff0c;说白了&#xff0c;就是基于某个硬件架构&#xff0c;在这个硬件部署了一个操作系统&#xff0c;再构架一层虚拟的操作系统&#xff0c;这个新构架的操作系统就是虚拟机。 不知道的兄弟姐妹们&#xff0c;…

重学Java 18.学生管理系统项目

臣无祖母&#xff0c;无以至今日&#xff0c;祖母无臣&#xff0c;无以终余年 母孙二人&#xff0c;更相为命&#xff0c;是以区区不能废远 —— 陈情表.李密 —— 24.2.20 一、编写JavaBean public class Student {//学号private int id;//姓名private String name;//年龄pr…

Codeforces Round 925 (Div. 3)(A,B,C,D,E,F,G)

比赛链接 这场打的很顺&#xff0c;感觉难度和 div 4 差不多&#xff0c;不是很难。D题稍微考了考同余的性质&#xff0c;E题直接模拟过程即可&#xff0c;F题也可以暴力模拟或者拓扑排序&#xff0c;G题是个数学题&#xff0c;是个简单隔板法。A到F题都可以直接模拟就有点离谱…

「WinCC报警系统专题」简述“消息系统”

WinCC通过报警给操作员提供了有关过程故障和错误的信息。它们有助于尽早检测重要情况和避免停机时间。 一、消息系统 消息&#xff08;报警&#xff09;系统由组态和运行系统组件组成。 1、组态系统 报警记录编辑器&#xff08;如图1所示&#xff09;是报警系统的组态组件。报…

docker (九)-进阶篇-docker-compos最佳实践部署zabbix

一 部署docker环境 关闭防火墙、selinux、开启docker&#xff0c;并设置开机自启动 注意点&#xff1a;docker部署的时候&#xff0c;bip要指定&#xff0c;不然会导致虚拟机ip和容器ip冲突&#xff0c;ssh连不上虚拟机 部署请参考 docker &#xff08;二&#xff09;-yum…

为什么程序员不能一次性写好,需要不停改bug?

写程序不是一次性完成的原因有很多&#xff0c;其中包括了解不充分、需求变更、复杂性、人为因素等多个方面的原因。 需求不明确&#xff1a; 在项目一开始&#xff0c;对需求可能存在歧义或不完整的理解。有时候&#xff0c;业务需求会在开发过程中发生变化&#xff0c;导致…

Go应用性能分析实战

Go很适合用来开发高性能网络应用&#xff0c;但仍然需要借助有效的工具进行性能分析&#xff0c;优化代码逻辑。本文介绍了如何通过go test benchmark和pprof进行性能分析&#xff0c;从而实现最优的代码效能。原文: Profiling Go Applications in the Right Way with Examples…

【Vuforia+Unity】AR03-圆柱体物体识别

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…

工具分享:在线键盘测试工具

在数字化时代&#xff0c;键盘作为我们与计算机交互的重要媒介之一&#xff0c;其性能和稳定性直接影响到我们的工作效率和使用体验。为了确保键盘的每个按键都能正常工作&#xff0c;并帮助用户检测潜在的延迟、连点等问题&#xff0c;一款优质的在线键盘测试工具显得尤为重要…

Java后端底座从无到有的搭建(随笔)

文章目录 开发模式的演变草创时期1.0时期&#xff08;基座时期&#xff09;1.1时期&#xff08;低代码时期&#xff09;2.0时期&#xff08;无代码时期&#xff09; 前言&#xff1a;本文是笔者在初创公司&#xff0c;一年多来Java后端服务底座搭建过程的总结&#xff0c;如有不…

四旋翼无人机控制-零散笔记整理

四旋翼无人机控制-零散笔记整理 说明仿真框架 说明 这是低创文章&#xff0c;本意是整理本科留下来的一堆零碎的纸质笔记&#xff0c;整理完就把纸质的扔了。所以前后不连贯&#xff0c;也可能有错误&#xff0c;图片都是直接拍的笔记照片&#xff0c;很丑。如果想系统学习的可…

【C++】STL- > string类(超详解!!!)

文章目录 前言1、string类的出现1.1 C语言中的字符串1.2 平时使用 2. 标准库中的string类2.1 string类的常用文档&#xff08;重要&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;2.2 string类的常用接口说明(接口原型我这里就不展示了&#xff0c;文档中都有可…

前后端分离(delivery-management)部署文档

1. 前端项目:delivery-management 1.1. 前端项目打包 执行命令:npm run build 或者yarn run build,生成dist目录。 构建流程如下图: 1.2. 文件上传 将打包好的前端项目(dist目录),上传到服务器,并拷贝到nginx安装目录html目录下。 执行上传命令(sftp):put -r E:\…

展示用HTML编写的个人简历信息

展示用HTML编写的个人简历信息 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

Windows 自带的 Linux 子系统(WSL)安装与使用

WSL官网安装教程&#xff1a; https://learn.microsoft.com/zh-cn/windows/wsl/install Windows 自带的Linux子系统&#xff0c;比用VM什么的香太多了。可以自己看官方教程&#xff0c;也可以以下步骤完成。 如果中间遇到我没遇到的问题百度&#xff0c;可以在评论区评论&#…