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


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

    一、 什么是RSA加密?

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

    二、引入jsencrypt.js文件

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

    <script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.2.1/jsencrypt.min.js"></script>
    
    • 1

    三、生成公钥和私钥

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    五、也可以在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);
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

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

  • 相关阅读:
    如何选择学生护眼灯?适合学生的柔和护眼台灯
    Java基础(五)
    rsync下行同步+inotify实时同步部署
    计算机毕业设计ssm校园图书借阅服务系统jd2z8系统+程序+源码+lw+远程部署
    【关系抽取】TPLinker:单阶段联合抽取,并解决暴漏偏差
    dubbo3.0.5同一个providerAPI的消费组,不同应用的消费者设置不同的消费者参数,会导致其它消费者服务无法启动
    python包Package:import包
    NVMe系列专题之一:NVMe技术概述
    [Doris]contens集群部署和基本使用(有时间继续补充内容)
    C++ 32盏灯,利用进制和 与 或 进行设计
  • 原文地址:https://blog.csdn.net/yfx000/article/details/126139457