首页 > 其他分享 >前后端使用 RSA非对称加密传输数据

前后端使用 RSA非对称加密传输数据

时间:2023-05-15 13:55:09浏览次数:38  
标签:加密传输 return String text RSA Cipher static 非对称 public

使用思路流程:后端生成公钥、私钥。前端获取公钥后使用公钥对明文加密,然后后端使用私钥对密文解密。
前端引用:jsencrypt.min.js

package com.ruoyi.common.utils;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.crypto.Cipher;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

@Component
public class RsaUtils {
// Rsa 私钥 也可固定秘钥对 若依原写法(不安全)
public static String privateKeys = "";
private static String publicKeyStr = "";
private static String privateKeyStr = "";
private static final RsaKeyPair rsaKeyPair = new RsaKeyPair();
private static final Logger logger = LoggerFactory.getLogger(MapUtils.class);

/**
* 私钥解密
*
* @param text 待解密的文本
* @return 解密后的文本
*/
public static String decryptByPrivateKey(String text) throws Exception {
// logger.info(rsaKeyPair.getPrivateKey());
return decryptByPrivateKey(rsaKeyPair.getPrivateKey(), text);
}

/**
* 公钥解密
*
* @param publicKeyString 公钥
* @param text 待解密的信息
* @return 解密后的文本
*/
public static String decryptByPublicKey(String publicKeyString, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}

/**
* 私钥加密
*
* @param privateKeyString 私钥
* @param text 待加密的信息
* @return 加密后的文本
*/
public static String encryptByPrivateKey(String privateKeyString, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}

/**
* 私钥解密
*
* @param privateKeyString 私钥
* @param text 待解密的文本
* @return 解密后的文本
*/
public static String decryptByPrivateKey(String privateKeyString, String text) throws Exception {
PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] result = cipher.doFinal(Base64.decodeBase64(text));
return new String(result);
}

/**
* 公钥加密
*
* @param publicKeyString 公钥
* @param text 待加密的文本
* @return 加密后的文本
*/
public static String encryptByPublicKey(String publicKeyString, String text) throws Exception {
X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyString));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(text.getBytes());
return Base64.encodeBase64String(result);
}

/**
* 构建RSA密钥对
*
* @return 生成后的公私钥信息
*/
@Bean
public void generateKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
rsaKeyPair.setPrivateKey(privateKeyString);
rsaKeyPair.setPublicKey(publicKeyString);
publicKeyStr = publicKeyString;
privateKeyStr = privateKeyString;
}


public static String getPublicKey() {
return publicKeyStr;
}

public static String getPrivateKey() {
return privateKeyStr;
}

public static RsaKeyPair rsaKeyPair() {
return rsaKeyPair;
}

/**
* RSA密钥对对象
*/
public static class RsaKeyPair {
private String publicKey;
private String privateKey;

public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}

public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}

public RsaKeyPair() {

}

public RsaKeyPair(String publicKey, String privateKey) {
this.publicKey = publicKey;
this.privateKey = privateKey;
}

public String getPublicKey() {
return publicKey;
}

public String getPrivateKey() {
return privateKey;
}
}
}

标签:加密传输,return,String,text,RSA,Cipher,static,非对称,public
From: https://www.cnblogs.com/feizai-java/p/17401656.html

相关文章

  • MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略 关键
    MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略关键词:纳什谈判合作博弈微网电转气-碳捕集P2P电能交易交易参考文档:《基于非对称纳什谈判的多微网电能共享运行优化策略》完美复现仿真平台:MATLABCPLEX+MOSEK/IPOPT主要内容:该代码主要做的是微网间基于非对称......
  • MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策
    MATLAB代码:基于非对称纳什谈判的多微网电能共享运行优化策略关键词:纳什谈判合作博弈微网电转气-碳捕集P2P电能交易交易参考文档:[右]《基于非对称纳什谈判的多微网电能共享运行优化策略》仿真平台:MATLABCPLEX+MOSEK/IPOPT[钉子][钉子]主要内容:该代码主要做的是微网间基......
  • 非对称加密的使用过程
      通过一个例子说明非对称加密的过程: 假设A,B两人进行公钥加密通信,A为信息发出者。  B首先通过算法生成密钥对(包含公钥,私钥),之后将公钥发送给A,B保留私钥。  A使用B发送来的公钥对信息进行加密,将密文发送给B,B利用自己的私钥对密文进行解密。......
  • Robust Deep Reinforcement Learning through Adversarial Loss
    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布!35thConferenceonNeuralInformationProcessingSystems(NeurIPS2021)  Abstract最近的研究表明,深度强化学习智能体很容易受到智能体输入上的小对抗性扰动的影响,这引发了人们对在现实世界中部署此类代理的担......
  • Git--no matching host key type found. Their offer: ssh-rsa
     解决方法:在用户目录下的.ssh文件夹下新建一个config文件Host*HostKeyAlgorithms+ssh-rsaPubKeyAcceptedKeyTypes +ssh-rsa......
  • JS逆向 -- 某平台登录算法分析(RSA加密)
    一、输入账号密码,进行抓包二、F12打开开发者工具,抓包分析,password被加密了三、全局搜索password关键字,挨个分析,在箭头标记处找到了关键代码四、局部搜索,定位加密的关键点,通过JSEncrypt,setPublicKey等关键字分析是RSA加密五、代码编写1、调用RSA加密的基本代码编写functionaiyou(pw......
  • 树的遍历(traversal)
    Traversal一般指遍历。所谓遍历(Traversal),是指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。访问结点所做的操作依赖于具体的应用问题,具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一.........
  • 非对称密钥的,签名和验签,可否理解为另一种加密和解密???
    背景突然有人这么一给我干蒙了!非对称首先想到的是RSADSARSA也是我们比较熟悉的对称算法也用的比较多私钥公钥比如gitlabsshopenssh、生成秘钥、rsa秘钥DSA用的少也是非对称的签名算法也要用到公钥红河私钥另外一个不常用的非对称算法ECC基于椭圆曲......
  • C# 实现RSA加解密
    一、支付宝工具生成公钥私钥下载地址链接:https://pan.baidu.com/s/15L1GM8mK43tzV9XyyNEV8Q提取码:vux3使用方法可参考阿里文档:https://docs.open.alipay.com/291/105971/二、加密说明:1.使用公钥加密, 2.加密后每次结果是可变的三、解密说明:1.使用私钥解密四、实现代码利用工具......
  • C# 实现SHA1withRSA
    对称加密(DES、3DES)、非对称加密(RSA、SHA1withRSA)参考:  对称加密(DES、3DES)、非对称加密(RSA、SHA1withRSA)_预立数据科技-CSDN博客一、支付宝工具生成公钥私钥下载地址链接:https://pan.baidu.com/s/15L1GM8mK43tzV9XyyNEV8Q提取码:vux3使用方法可参考阿里文档:网页&移动......