栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

RSA 非对称加密解密,可以javascript和java加解密

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RSA 非对称加密解密,可以javascript和java加解密

公钥与私钥机制属于非对称加密的范畴,非对称是相对于对称加密而言的,对称加密用于加密与解密的密钥是同一把,而非对称加密则用于加密与解密的密钥不相同,一个公开,称为公钥;一个保密,称为私钥,公钥与私钥必须成对出现,只有是配对的公钥与私钥才能用于加解密。公钥通过非安全通道发放,私钥则由发放者保留,公钥加密的数据,只能使用其配对的私钥对其解密;反之,私钥加密的数据,只可使用公钥对其解密。

一、 什么是RSA加密?

RSA是一种使用不同的加密密钥与解密密钥的体制,不对称加密算法。公钥加密,私钥解密。
RSA算法是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,一般推荐使用1024位。

二、引入jsencrypt.js文件

CDN下载或引用js
https://www.bootcdn.cn/jsencrypt/


三、生成公钥和私钥

RSA加密解密需要用到公钥和私钥,可以在这个网站生成
http://web.chacuo.net/netrsakeypair
公钥在外部使用,私钥在系统内部使用,生成后妥善保管

四、使用
  1. 将下载好的jsencrypt.js放在一个专门的文件夹,例如 utils/jsencrypt.js

  2. 为了方便使用,在同一目录下新建文件 rsa.js:

import { JSEncrypt } from './jsencrypt'
 
// 加密公钥
const key = `---`
 
// 加密
export function rsaEncrypt (msg) {
  const jsencrypt = new JSEncrypt()
  jsencrypt.setPublicKey(key)
  const encryptMsg = jsencrypt.encrypt(msg)
  return encryptMsg
}
 
// 解密私钥
const privateKey = `---`
 
// 解密
export function rsaDecrypt (msg) {
  const decrypt = new JSEncrypt()
  decrypt.setPrivateKey(privateKey)
  const decryptMsg = decrypt.decrypt(msg)
  return decryptMsg
}
  1. 在第二步已经导出了加密(rsaEncrypt)和 解密(rsaDecrypt)的方法,在需要用到的地方导入使用即可。
import { rsaEncrypt, rsaDecrypt } from '@/utils/rsa'
 
// 明文
let msg = '我是被传输的重要明文信息哈哈哈哈哈'
// 加密后的密文
let encryptMsg = rsaEncrypt(msg)
console.log(encryptMsg )
// 解密后的明文
let decryptMsg = rsaDecrypt(encryptMsg)
console.log(decryptMsg)
五、也可以在java中加密解密

请参考
https://blog.csdn.net/weixin_45740811/article/details/124344674

核心解密代码如下

import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;

import javax.crypto.Cipher;

public class EncryptUtil {

	public static String encrypt(String text,String publicKeyStr) throws Exception {
		X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKeyStr));
		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.getEncoder().encodeToString(result);
   }

参考文章
前端使用jsencrypt进行RSA加密解密(uniapp也可用)
https://blog.csdn.net/qq_40146789/article/details/118929205

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1036945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号