国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RSA 公私鑰加解密Java實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了RSA 公私鑰加解密Java實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.簡(jiǎn)單快速集成,飲用hutool工具包實(shí)現(xiàn)

1)引入hutool包

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.8</version>
        </dependency>

2) 制作好自己的rsa公私鑰文件,通過openssl實(shí)現(xiàn)即可,直接放到resources下面?

java使用rsa公鑰私鑰加密解密,java,java

3)讀取rsa文件,進(jìn)行加解密實(shí)現(xiàn),公鑰加密,私鑰解密,注意點(diǎn)都在里面注釋了。

package com.shebao.controller.wechat;

import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class HutoolRSATest {

    public static void main(String[] args) throws IOException {
        String en = testEncrypt();
        testDecrypt(en);
    }

    /**
     * 私鑰解密
     * @param content 加密了的內(nèi)容
     * @throws IOException
     */
    public static void testDecrypt(String content) throws IOException {
        Resource resource = new ClassPathResource("rsa_private_key.pem");
        System.out.println(resource.getFile().getPath());
        BufferedReader br = new BufferedReader(new FileReader(resource.getFile().getPath()));
        /**
         * 這個(gè)巨重要,會(huì)篩選掉密鑰內(nèi)容中的首行標(biāo)識(shí)字段
         */
        String s = br.readLine();
        String str = "";
        s = br.readLine();
        while (s.charAt(0) != '-') {
            str += s + "\r";
            s = br.readLine();
        }
        RSA rsa = new RSA(str,null);
        String s1 = rsa.decryptStr(content, KeyType.PrivateKey);
        System.out.println(s1);
    }

    /**
     * 公鑰加密
     * @return
     * @throws IOException
     */
    public static String testEncrypt() throws IOException {
        String content = "這是糊涂工具包hutool";
        Resource resource = new ClassPathResource("rsa_public_key.pem");
        System.out.println(resource.getFile().getPath());
        BufferedReader br = new BufferedReader(new FileReader(resource.getFile().getPath()));
        String s = br.readLine();
        String str = "";
        s = br.readLine();
        while (s.charAt(0) != '-') {
            str += s + "\r";
            s = br.readLine();
        }

        RSA rsa = new RSA(null,str);
        String result = rsa.encryptBase64(content, KeyType.PublicKey);
        System.out.println(result);
        return result;
    }
}

2.不借助工具,直接引用java?security包實(shí)現(xiàn)功能

1)公私鑰依然放在resources下

2)公鑰加密,私鑰解密

3)java.security.Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider() );這句話很重要,不過別亂用,容易導(dǎo)致內(nèi)存泄漏:可以參看如下文章

每次New一個(gè)BouncyCastleProvider導(dǎo)致的內(nèi)存泄漏_shenhaiwen的博客-CSDN博客

我的實(shí)例改良了這里

4)要注意base64的解碼和編碼文章來源地址http://www.zghlxwxcb.cn/news/detail-694905.html

package com.shebao.controller.wechat;


import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

import javax.crypto.Cipher;
import java.io.BufferedReader;
import java.io.FileReader;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Security;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class TestRSA {

    private static String content = "你好呀RSA";


    public static void main(String[] args) throws Exception {
        PublicKey publicKey = getPublicKey();
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] bytes = cipher.doFinal(content.getBytes());
        byte[] bytes1 = Base64.encodeBase64(bytes);
        String result = new String(bytes1,"utf-8");
        System.out.println(result);
        test(result);

    }

    public static void test(String en) throws Exception {
        PrivateKey privateKey = getPrivate();
        KeyFactory keyFactory1 = KeyFactory.getInstance("RSA");
        Cipher cipher = Cipher.getInstance(keyFactory1.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] bytes2 = cipher.doFinal(Base64.decodeBase64(en));
        System.out.println(new String(bytes2, StandardCharsets.UTF_8));
    }

    public static PrivateKey getPrivate() throws Exception {
        Resource resource = new ClassPathResource("rsa_private_key.pem");
        System.out.println(resource.getFile().getPath());
        BufferedReader br = new BufferedReader(new FileReader(resource.getFile().getPath()));
        /**
         * 這個(gè)巨重要,會(huì)篩選掉密鑰內(nèi)容中的首行標(biāo)識(shí)字段
         */
        String s = br.readLine();
        /**
         * 這里是讀取的私鑰文件
         */
        String str = "";
        s = br.readLine();
        while (s.charAt(0) != '-') {
            str += s + "\r";
            s = br.readLine();
        }

        Base64 base64 = new Base64();
        byte[] b = base64.decode(str);
        /**
         * 這個(gè)也是巨重要的,不信可以去了試試,也有另一種方式去解決這個(gè)問題,沒試
         */
        BouncyCastleProvider instance = getInstance();
        if (Security.getProvider(instance.getName()) == null) {
            java.security.Security.addProvider(
                    instance
            ); 
        }

        // 生成私匙
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(b);
        PrivateKey privateKey = kf.generatePrivate(keySpec);
        return privateKey;
    }

    public static PublicKey getPublicKey() throws Exception {
        Resource resource = new ClassPathResource("rsa_public_key.pem");
        System.out.println(resource.getFile().getPath());
        BufferedReader br = new BufferedReader(new FileReader(resource.getFile().getPath()));
        String s = br.readLine();
        /**
         * 這里是讀取的公鑰文件
         */
        String public_key = "";
        s = br.readLine();
        while (s.charAt(0) != '-') {
            public_key += s + "\r";
            s = br.readLine();
        }

        Base64 base64 = new Base64();
        byte[] decode = base64.decode(public_key);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decode);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(keySpec);
        return publicKey;
    }

    private static org.bouncycastle.jce.provider.BouncyCastleProvider bouncyCastleProvider = null;

    public static synchronized org.bouncycastle.jce.provider.BouncyCastleProvider getInstance() {
        if (bouncyCastleProvider == null) {
            bouncyCastleProvider = new org.bouncycastle.jce.provider.BouncyCastleProvider();
        }
        return bouncyCastleProvider;
    }
}

到了這里,關(guān)于RSA 公私鑰加解密Java實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • RSA雙向加解密(公鑰加密-私鑰解密;私鑰加密-公鑰解密)

    ??????? 非對(duì)稱加密算法中,提供一個(gè)公鑰一個(gè)私鑰。一般情況下,采用公鑰加密、私鑰解密的方式。 ??????? 假設(shè)有這樣一個(gè)場(chǎng)景:服務(wù)A與服務(wù)B需要通信,通信內(nèi)容為了安全需要進(jìn)行加密傳輸,并且服務(wù)A與服務(wù)B不能互相持有對(duì)方的鑰匙。 ??????? 我首先想到的是

    2024年02月11日
    瀏覽(102)
  • Java代碼實(shí)現(xiàn)RSA算法加密解密文件功能

    Java代碼實(shí)現(xiàn)RSA算法加密解密文件功能

    底層算法不做贅述,想要了解自行百度。 RSA屬于非對(duì)稱加密,非對(duì)稱加密有公鑰和私鑰兩個(gè)概念,私鑰自己擁有,不能給別人,公鑰公開。根據(jù)應(yīng)用的不同,我們可以選擇使用不同的密鑰加密: 簽名:使用私鑰加密,公鑰解密。用于讓所有公鑰所有者驗(yàn)證私鑰所有者的身份

    2024年02月12日
    瀏覽(27)
  • 若依ruoyi前端vue使用jsencrypt.js加密后端java進(jìn)行RSA解密(前后端交互RSA加解密)

    目錄 1、前后端RSA加解密實(shí)現(xiàn)思路 2、前端 3、后端 按照約定來說公鑰一般用來加密,大家都可以獲取得到,私鑰用來解密,當(dāng)然你也可以混著用,以下示例是前端通過加密,后端解密. ?-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ81AMIIBCgKCAQEA1+05vAf7m5NcLNLkRtsm gp+QdzcW6MVdayGTGBJG0v

    2024年02月06日
    瀏覽(105)
  • JAVA+Node/JavaScript 前后端通訊 RSA 加解密實(shí)現(xiàn)

    實(shí)際項(xiàng)目中,前后端或跨語言加密通訊的場(chǎng)景十分常見。這里以 Java 和 Node.js (兼容 瀏覽器 )兩種開發(fā)語言為例,實(shí)現(xiàn) RSA 加解密通訊。 此代碼采用分段加解密,理論上支持無限長度的文本內(nèi)容 使用示例:

    2024年02月07日
    瀏覽(25)
  • 前端js使用jsrsasign,生成RSA秘鑰,獲取一系列信息(公鑰,私鑰,模數(shù),指數(shù)等)進(jìn)行加密解密

    前言: 之前的項(xiàng)目里用的RSA加解密的時(shí)候是生成固定的公鑰(模數(shù),指數(shù))和私鑰放在代碼里進(jìn)行數(shù)據(jù)的解密?,F(xiàn)在要修改成前端自己生成(模數(shù)和指數(shù))傳給后臺(tái)。后臺(tái)加密數(shù)據(jù)返回給我。我在用私鑰解密。 后面查了很多,開始的window.crypto里的方法可以生成公鑰和私鑰,

    2024年02月16日
    瀏覽(111)
  • RSA加密解密(無數(shù)據(jù)大小限制,php、go、java互通實(shí)現(xiàn))

    RSA加解密中必須考慮到的**長度、明文長度和密文長度問題。明文長度需要小于**長度,而密文長度則等于**長度。因此當(dāng)加密內(nèi)容長度大于**長度時(shí),有效的RSA加解密就需要對(duì)內(nèi)容進(jìn)行分段。 這是因?yàn)?,RSA算法本身要求加密內(nèi)容也就是明文長度m必須0m**長度n。如果小于這個(gè)長

    2024年02月15日
    瀏覽(22)
  • C#.NET Framework RSA 公鑰加密 私鑰解密 ver:20230609

    C#.NET Framework RSA 公鑰加密 私鑰解密 ver:20230609 ? 環(huán)境說明: .NET Framework 4.6 的控制臺(tái)程序?。 ? .NET Framework?對(duì)于RSA的支持: 1.?.NET Framework 內(nèi)置只支持XML格式的私鑰/公鑰。如果要用PKCS1,PKCS8格式的,要用到三方庫BouncyCastle。 2. .NET 中默認(rèn)加密算法為“RSA/ECB/PKCS1Padding” ,要和

    2024年02月08日
    瀏覽(120)
  • RSA加解密工具類(PKCS8公鑰加密,PKCS1私鑰解密)

    RSA加解密工具類(PKCS8公鑰加密,PKCS1私鑰解密)

    場(chǎng)景 :如果項(xiàng)目上生成的秘鑰,公鑰是PKCS8格式,私鑰卻是PKCS1格式。需要在這種場(chǎng)景加解密的話可以直接使用下面工具類。 特殊說明:私鑰解密的時(shí)候必須把私鑰源文件內(nèi)容整個(gè)傳入,不能刪除私鑰的文件頭和文件尾,并且不能刪除換行。

    2024年02月11日
    瀏覽(83)
  • C# .NET CORE .NET6 RSA 公鑰加密 私鑰解密

    環(huán)境說明: .NET CORE 版本:.NET 6 。 ? .NET CORE 對(duì)于RSA的支持: 1. .NET 6 中內(nèi)置了對(duì) PKCS1,PKCS8 2種私鑰格式的支持。 2. 如果你要部署在Linux,docker ,k8s 中;一定要用 “RSA”這個(gè)類,不能是 .NET FRAMEWORK 的?RSACryptoServiceProvider。 3. .NET 中默認(rèn)加密算法為“RSA/ECB/PKCS1Padding” ,要和JAVA互通

    2024年02月08日
    瀏覽(95)
  • Python(30):非對(duì)稱加密算法RSA的使用(openssl生成RSA公私鑰對(duì))

    Python(30):非對(duì)稱加密算法RSA的使用(openssl生成RSA公私鑰對(duì))

    1.1、生成RSA公私鑰對(duì)命令 1.2、公鑰 -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCfNHu9aoeNUTAZH3GCP2CQaSOg XNx0tImsIaCWBEQK3/fvUx8f17hIOtttCMrrTPWefUdcUxLIZ+xzqeU/eISsz9Ym kguImd1+bMkGIYiHBKmF5Uww2jGSU738c+AUuRKpixZP+VPekLY+KbOH7NkE2U/L XGbDeMXeiqQ22UmOSQIDAQAB -----END PUBLIC KEY----- 1.3、私鑰 -----BEGIN RSA PRIVATE KEY--

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包