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

RSA加解密(JS加密,Java解密)

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

RSA加解密(JS加密,Java解密)

直接上代码

1. 前端
  1. 引入jsencrypt
# 使用npm引入
cnpm install jsencrypt
  1. 创建通用的工具JS

公钥可以通过此网站在线生成 在线生成公钥私钥对

import { JSEncrypt } from 'jsencrypt'


var publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4jFr2m2d0AWFhmHs23LcW6649tZUk+7vxPjHW+/YZeCgXi8x9ANK0BGt8Kji8Ujc+K+YU7oLU0AlMoXzG05/Ghc7GNfLBb0tv2hYMYFKzctYR8tHGv0Zxp1nV0AJYiZKqW+v9WTWvfFMs1MOshADkTk9qHDpsxUYMy8CU6j09MQIDAQAB"


export function encrypt(data) {
	var jsEncrypt = new JSEncrypt();
	jsEncrypt.setPublicKey(publicKey);
	return jsEncrypt.encrypt(data);
}
2.Java
package com.demo.utils;

import lombok.SneakyThrows;
import org.apache.commons.codec.binary.base64;

import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;


public final class RSAUtil {

    
    private static final int MAX_DECRYPT_BLOCK = 128;

    
    @SneakyThrows
    public static PrivateKey getPrivateKey(String privateKey) {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        byte[] decodedKey = base64.decodebase64(privateKey.getBytes());
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(decodedKey);
        return keyFactory.generatePrivate(keySpec);
    }

    
    @SneakyThrows
    public static String decrypt(String data, PrivateKey privateKey) {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] dataBytes = base64.decodebase64(data);
        int inputLen = dataBytes.length;

        int offset = 0;
        byte[] cache;
        int i = 0;

        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            // 对数据分段解密
            while (inputLen - offset > 0) {
                if (inputLen - offset > MAX_DECRYPT_BLOCK) {
                    cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK);
                } else {
                    cache = cipher.doFinal(dataBytes, offset, inputLen - offset);
                }
                out.write(cache, 0, cache.length);
                i++;
                offset = i*MAX_DECRYPT_BLOCK;
            }
            // 解密后的内容
            return out.toString("UTF-8");
        }
    }

    private RSAUtil() {}
}
测试
package com.unionstone.fny.utils;

import org.junit.jupiter.api.Test;

import java.security.PrivateKey;

class RSAUtilTest {

	// 与前端一块生成的公钥私钥对。此为私钥(此为示例值,已被和谐不可直接复用)
    private static final String PRIVATE_KEY = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKZg2Fp+4sy1lTRvcfjSXkZRPtf6F8aZTVVOnEgCucJ2cgbo52Eg/EWRHTVBXQ+YhqV3vmMBbrau/hv+JjDR2hx9dcMjEQ1AuaOok9oxgDHVPoSJEC/7FsEULyMXSYgf0In/fBtsCZmtp6lvvOeBRvexhkoGVXaIenasnroa07PzAgMBAAECgYA4XIxOM7eu80BlL++jA9it523riiwtutBr4/1Fmq6zRxbEAROWIHNLiyC6Z/66hYJ71EpcCQmV8D99Mvp0z4CrNLAkEAzQ3T1zaDJRiwXGRHcBOHhqBNtt8X+IjEKLPdOJOHiS5fuNVZ1Ax5DkfewInsjMKmzr+Bd8SjxrX9hMK2FtCZwQJADzCln/vG4k2NPOg8L8CNPgoITQF2wFdDJpmGOv6vf/Q+7RDx5pqddvJsPFI3AIAGarQ1ds437pVyAK89racjAQJBAK0gOJYnIgZG1IEOdSTemVDsW7eYZ3eQVw2xnMgZvQQJdxlvWaLgzpvanjNwreE0ZP/NCaCZCc0LGN2bDJuFIpg=";

    @Test
    void decrypt() {
        // 前端加密的密钥
        String ciphertext = "xxxx";
        PrivateKey privateKey = RSAUtil.getPrivateKey(PRIVATE_KEY);
        String decrypt = RSAUtil.decrypt(ciphertext, privateKey);
        System.out.println(decrypt);
    }

}

(本文完!)转载必须付本文链接!

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

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

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