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

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

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

場景:如果項(xiàng)目上生成的秘鑰,公鑰是PKCS8格式,私鑰卻是PKCS1格式。需要在這種場景加解密的話可以直接使用下面工具類。

依賴

<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcprov-jdk15on</artifactId>
	<version>1.49</version>
</dependency>
<dependency>
	<groupId>org.bouncycastle</groupId>
	<artifactId>bcpkix-jdk15on</artifactId>
	<version>1.49</version>
</dependency>

工具類

特殊說明:私鑰解密的時候必須把私鑰源文件內(nèi)容整個傳入,不能刪除私鑰的文件頭和文件尾,并且不能刪除換行。

package com.XXX.XXX.common.util;


import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.openssl.PEMKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;

import javax.crypto.Cipher;
import java.io.Reader;
import java.io.StringReader;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.Security;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;

/**
 * RSAUtils加解密工具類
 *
 * @author dbz
 * @date 2022-9-23
 */
public class RSAUtils {

    /**
     * PKCS1私鑰解密
     *
     * @param str        str
     * @return String
     * @throws Exception Exception
     */
    public static String decryptRSA(String str, String privateKey) throws Exception {
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        Cipher rsa = Cipher.getInstance("RSA/ECB/PKCS1Padding", "BC");
        rsa.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKey));
        byte[] utf8 = rsa.doFinal(Base64.decodeBase64(str));
        String result = new String(utf8, "UTF-8");
        return result;
    }

    private static PrivateKey getPrivateKey(String privateKey) throws Exception {
        Reader privateKeyReader = new StringReader(privateKey);
        PEMParser privatePemParser = new PEMParser(privateKeyReader);
        Object privateObject = privatePemParser.readObject();
        if (privateObject instanceof PEMKeyPair) {
            PEMKeyPair pemKeyPair = (PEMKeyPair) privateObject;
            JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
            PrivateKey privKey = converter.getPrivateKey(pemKeyPair.getPrivateKeyInfo());
            return privKey;
        }
        return null;
    }

    /**
     * PKCS8公鑰加密
     *
     * @param str       加密字符串
     * @return 密文
     * @throws Exception 加密過程中的異常信息
     */
    public static String publicKeyEncrypt(String str, String publicKey) throws Exception {
        //base64編碼的公鑰
        byte[] decoded = Base64.decodeBase64(publicKey);
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").
                generatePublic(new X509EncodedKeySpec(decoded));
        //RSA加密
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);

        //當(dāng)長度過長的時候,需要分割后加密 117個字節(jié)
        byte[] resultBytes = getMaxResultEncrypt(str, cipher);

        String outStr = Base64.encodeBase64String(resultBytes);
        return outStr;
    }

    private static byte[] getMaxResultEncrypt(String str, Cipher cipher) throws Exception {
        byte[] inputArray = str.getBytes();
        int inputLength = inputArray.length;
        // 最大加密字節(jié)數(shù),超出最大字節(jié)數(shù)需要分組加密
        int MAX_ENCRYPT_BLOCK = 117;
        // 標(biāo)識
        int offSet = 0;
        byte[] resultBytes = {};
        byte[] cache = {};
        while (inputLength - offSet > 0) {
            if (inputLength - offSet > MAX_ENCRYPT_BLOCK) {
                cache = cipher.doFinal(inputArray, offSet, MAX_ENCRYPT_BLOCK);
                offSet += MAX_ENCRYPT_BLOCK;
            } else {
                cache = cipher.doFinal(inputArray, offSet, inputLength - offSet);
                offSet = inputLength;
            }
            resultBytes = Arrays.copyOf(resultBytes, resultBytes.length + cache.length);
            System.arraycopy(cache, 0, resultBytes, resultBytes.length - cache.length, cache.length);
        }
        return resultBytes;
    }
}

調(diào)用

RSA加解密工具類(PKCS8公鑰加密,PKCS1私鑰解密)文章來源地址http://www.zghlxwxcb.cn/news/detail-510104.html

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

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

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

相關(guān)文章

  • 在線AES加密/解密工具

    在線AES加密/解密工具

    在線AES加密/解密工具 http://lzltool.com/AES http://lzltool.com/AES

    2024年02月12日
    瀏覽(32)
  • SpringBoot接口加密解密工具

    SpringBoot接口加密解密工具

    介紹(項(xiàng)目源碼見文末?。。。。。。?在軟件項(xiàng)目開發(fā)過程中,當(dāng)需要對后端返回?cái)?shù)據(jù)進(jìn)行加密,或者前段向后端發(fā)送的數(shù)據(jù)時加密后的數(shù)據(jù),那么在接收前就需要進(jìn)行解密。本工具就是基于注解實(shí)現(xiàn)接口加密解密,使用非常方便。 在工具中,提供了多種加密和解密方式,

    2024年02月09日
    瀏覽(40)
  • 【教程】解決php微擎中的goto加密解密,一鍵解密工具

    【教程】解決php微擎中的goto加密解密,一鍵解密工具

    今天,我將向大家揭秘一款神奇的工具——goto解密工具,輕松解密這個看似棘手的問題。 無數(shù)開發(fā)者都曾因?yàn)閜hp中的goto功能而頭疼不已。goto解密工具其中之一就是解密goto代碼。通過精妙的算法和強(qiáng)大的解析能力,它能夠解密被goto加密的代碼段,使你能夠清晰地理解代碼的

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

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

    2024年02月08日
    瀏覽(120)
  • Java常用的加密解密工具類

    在軟件開發(fā)中,數(shù)據(jù)的安全性是一個重要的考慮因素。為了保護(hù)敏感數(shù)據(jù),我們經(jīng)常需要對數(shù)據(jù)進(jìn)行加密和解密操作。為了簡化加密解密操作,提高開發(fā)效率,我們可以使用一個常用的加密解密工具類。本文將介紹一個常用的 Java 加密解密工具類,并提供詳細(xì)的使用說明和示

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

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

    2024年02月08日
    瀏覽(95)
  • 一款實(shí)用的.NET Core加密解密工具類庫

    一款實(shí)用的.NET Core加密解密工具類庫

    在我們?nèi)粘i_發(fā)工作中,為了數(shù)據(jù)安全問題對數(shù)據(jù)加密、解密是必不可少的。加密方式有很多種如常見的AES,RSA,MD5,SAH1,SAH256,DES等,這時候假如我們有一個封裝的對應(yīng)加密解密工具類可以直接調(diào)用,那這樣可以節(jié)省不少的開發(fā)時間。今天推薦一款實(shí)用的.NET Core加密解密工

    2024年01月23日
    瀏覽(18)
  • 使用 OpenSSL 工具撰寫 Bash 腳本進(jìn)行密碼明文的加密與解密

    Written By: Xinyao Tian 本文檔描述了使用 OpenSSL 工具在 Bash 腳本中對密碼進(jìn)行加密和解密的簡單方式。 使用 Base64 算法進(jìn)行密碼的加密 腳本名稱為 encryptPasswd.sh , 腳本內(nèi)容如下: 使用 Base64 算法進(jìn)行密碼的解密 腳本名稱為 decryptPasswd.sh , 腳本內(nèi)容如下: 使用方法 檢視目錄中的腳本

    2024年02月06日
    瀏覽(507)
  • .Net 加密解密組件工具類 System.Security.Cryptography.Algorith

    .Net 加密解密組件工具類 System.Security.Cryptography.Algorith

    ? ? ? ? 在.NET Framework出現(xiàn)之前,如果我們需要進(jìn)行加密的話,我們只有各種較底層的技術(shù)可以選擇,如Microsoft Crypto API、Crypto++、Openssl等等,其用法相當(dāng)復(fù)雜。而在 .NET Framework中,這些復(fù)雜內(nèi)容(原來獨(dú)立的API和SDK)已經(jīng)被封裝合并在一個.NET框架類中,這對于程序開發(fā)人員

    2024年02月04日
    瀏覽(20)
  • Java:Hutool工具箱之Hutool-crypto加密解密

    Java:Hutool工具箱之Hutool-crypto加密解密

    文檔 https://hutool.cn/docs/#/crypto/概述 重點(diǎn)單詞: 摘自文檔 依賴 以MD5 為例 以AES 加密為例 這里有個問題,如果秘鑰長度不夠16位,會報(bào)錯 長度只能是16位,24位,32位 參考 https://toscode.gitee.com/dromara/hutool/issues/I4O1EB 以RSA為例

    2024年02月16日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包