首页 > 编程语言 >Java Web项目中使用RSA加密数据

Java Web项目中使用RSA加密数据

时间:2022-11-11 10:13:01浏览次数:73  
标签:Web 私钥 String crypt RSA Cipher Java JSEncrypt

在Web项目中有些时候需要对传输的数据加密后再传输到服务端进行解密使用,这里采用RSA进行公钥加密 私钥解密的模式会有较高的安全性。

这里选用的工具库是 JSEncrypt.js 与 javax.crypto.Cipher 

一、获取公钥与私钥

  这里直接使用 JSEncrypt.js 来生成最初的公钥与私钥即可,在浏览器控制台中输入下面代码获取结果

1 var crypt = new JSEncrypt();
2 var publicKey = crypt.getPublicKey(); 
3 var privateKey = crypt.getPrivateKey();
4 console.log("publickKey",publickKey);
5 console.log("privateKey",privateKey);

 

  

二、转换私钥格式

  由于Java中使用的密钥格式是 PKCS8 而 JSEncrypt.js 生成的私钥是 PKCS#1 格式,所以需要进行格式转换,这里用到一个在线转换工具http://tool.chacuo.net/cryptrsapkcs1pkcs8 进行私钥格式转换。

前端加密数据

1 var publicKey = "RSA PUBLIC KEY";//前面生成的公钥字符串 
2 var crypt = new JSEncrypt(); 
3 crypt.setPublicKey(publicKey); 
4 crypt.encrypt(value);

 

三、后端解密数据

 1 import javax.crypto.Cipher;
 2 import java.security.KeyFactory;
 3 import java.security.spec.PKCS8EncodedKeySpec;
 4 import java.util.Base64;
 5 
 6 public class RSAUtils {
 7     private static Cipher cipher = null;
 8     public static String decoder(String password) throws Exception {
 9         if (cipher == null) {
10             String privateKey = "RSA PRIVATE KEY";//前面转换后PKCS8格式私钥
11             cipher = Cipher.getInstance("RSA");
12             String privateKeyPEM = privateKey.replace("-----BEGIN PRIVATE KEY-----", "")
13                    .replace("-----END PRIVATE KEY-----", "")
14                    .replaceAll("\\s", "");
15             byte[] privateKeyByte = Base64.getDecoder().decode(privateKeyPEM);
16             cipher.init(Cipher.DECRYPT_MODE, KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(privateKeyByte)));
17         }
18         byte[] passwordByte = Base64.getDecoder().decode(password);
19         return new String(cipher.doFinal(passwordByte));
20     }
21 }

 

引用内容

标签:Web,私钥,String,crypt,RSA,Cipher,Java,JSEncrypt
From: https://www.cnblogs.com/masahiro/p/16877887.html

相关文章

  • 硬核剖析Java锁底层AQS源码,深入理解底层架构设计
    我们常见的并发锁ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier都是基于AQS实现的,所以说不懂AQS实现原理的,就不能说了解Java锁。上篇文章讲了AQS的加锁流程,这......
  • Java并发编程——基础知识(一)
    1.进程与线程1.1基本概念进程:对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发线程:进程的子任务,是CPU调度和分派的基本单位,用于保证程序......
  • Java组合异步编程(2)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 多数码农在开发的时候,要么处理同步应用,要么处理异步。但是如果能学会使用CompletableFuture,就会具备一种神奇的能力:将同......
  • 定位java程序中占用cpu最高的线程堆栈信息
    找出占用cpu最高的线程堆栈信息在java编码中,有时会因为粗心导致cpu占用较高的情况,为了避免影响程序的正常运行,需要找到问题并解决。这里模拟一个cpu占用较高的场景,并尝试......
  • stable-diffusion-webui+NovelAI+Python+Git+CUDA本地部署(2G显存,使用cpu运行)
    参考原文1:https://blog.csdn.net/weixin_62651190/article/details/127666631参考原文2:https://blog.csdn.net/yefufeng/article/details/127719952环境准备Python:3.10.......
  • Java MAC环境Intellij2022配置Servlet和Tomcat
    1、下载安装Tomcat官网:https://tomcat.apache.org/download-90.cgi ->download 下载完放入自定义路径,需要记住!这样算下载好了,详细-> https://blog.csdn.net/qq_44......
  • java学习
    Mardown学习标题:#空格+标题名字几级标题几个#字体Hello,word!Hello,word!Hello,word!Hello,word!Hello,word!引用12345>直接输入引用内容分割线___三个......
  • 【Java】Java基础知识点之集合类型基础概念
    Java常用集合有哪些?Java集合类主要由两个接口Collection和Map派生出来的。Collection有三个子接口:List、Set、Queue。List代表了有序可重复集合,可直接根据元素的索引来访......
  • Android中Java和JavaScript交互
    Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本。本文将介绍如何实现Java代码和Javascript代码的相互调用。如何实现......
  • How JWT (JSON Web Token) authentication works?
    HowJWT(JSONWebToken)authenticationworks?https://www.idiotinside.com/2019/09/26/how-jwt-authentication-works/WhatisJWT(JSONWeb Token)?JSONWebTo......