Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)

这篇具有很好参考价值的文章主要介绍了Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)展示了使用原生Java进行RSA加解密,本文介绍下使用当下流行的Hutool工具进行RSA加解密的用法。

目录

一、在Linux环境下生成公钥、私钥文件

二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记

三、pom文件中引入hutool依赖

四、使用hutool API编码


一、在Linux环境下生成公钥、私钥文件

生成公私钥文件此处不再描述,请参考笔者的另一篇帖子(https://blog.csdn.net/u014137486/article/details/136413532)

二、将生成的公私钥文件导入项目中并移除pem文件的前后公私钥标记

比如导入private_key.pem, public_key.pem到项目classpath的keys目录中,

hutool rsa加解密,java,RSA加解密,hutool RSA加解密,Java公私钥加解密,Java非对称加密解密

并移除pem文件中的以下内容,只保留密钥内容即可,

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----

三、pom文件中引入hutool依赖

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

四、使用hutool API编码

以下为公钥加密、私钥解密的完整示例代码,

package com.frank.project.test.rsa;

import cn.hutool.core.io.file.FileReader;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;

public class RSAUtilUseHutool {

	public static void main(String[] args) throws Exception {
		// 在classpath下的公私钥文件
        String pubKeyFilePathInClasspath = "keys/public_key.pem";
        String priKeyFilePathInClasspath = "keys/private_key.pem";
        // 要加密的文本
        String text = "和发票是否激活皮肤设计大";
        
        long startTime = System.currentTimeMillis();
        // 获取公钥并进行rsa加密
        String encryptedString = encrypt(text, getPublicKey(pubKeyFilePathInClasspath));
        // 获取私钥并进行rsa解密
        String decryptedString = decrypt(encryptedString, getPrivateKey(priKeyFilePathInClasspath));
        
        System.out.println("hutool rsa cost:" + (System.currentTimeMillis() - startTime) + "ms");
        
        System.out.println("Encrypted String - " + encryptedString);
        System.out.println("Decrypted String - " + decryptedString);
	}
	
	/**
	 * 使用公钥加密
	 * @param text 待使用rsa加密的明文
	 * @param publicKey 文本格式的公钥内容(不包含-----BEGIN PUBLIC KEY-----,-----END PUBLIC KEY-----)
	 * @return
	 */
	private static String encrypt(String text, String publicKey){
		return new RSA(null, publicKey).encryptHex(text, KeyType.PublicKey);
	}
	
	/**
	 * 使用私钥解密
	 * @param encryptedString 使用rsa加密的密文串
	 * @param privateKey 文本格式的私钥内容(不包含-----BEGIN PRIVATE KEY-----,-----END PRIVATE KEY-----)
	 * @return
	 */
	private static String decrypt(String encryptedString, String privateKey){
		return new RSA(privateKey, null).decryptStr(encryptedString, KeyType.PrivateKey);
	}
	
	/**
	 * 从公钥文件中读取公钥数据
	 * 
	 * @param pubKeyFilePathInClasspath classpath下的公钥文件路径
	 * @return
	 * @throws Exception
	 */
	private static String getPublicKey(String pubKeyFilePathInClasspath)
			throws Exception {
		return new FileReader(getAbsolutePath(pubKeyFilePathInClasspath))
				.readString();

	}

	/**
	 * 从私钥文件中读取私钥数据
	 * 
	 * @param priKeyFilePathInClasspath classpath下的私钥文件路径
	 * @return
	 * @throws Exception
	 */
	private static String getPrivateKey(String priKeyFilePathInClasspath)
			throws Exception {
		return new FileReader(getAbsolutePath(priKeyFilePathInClasspath))
				.readString();
	}

	/**
	 * 获取classpath下指定文件的绝对路径
	 * @param filePathInClasspath classpath下文件路径
	 * @return
	 */
	private static String getAbsolutePath(String filePathInClasspath) {
		return RSAUtilUseHutool.class.getClassLoader()
				.getResource(filePathInClasspath).getPath();
	}

}

可原生Java API一样,hutool同样支持使用私钥加密、公钥解密,只需要传入的key不同即可,文章来源地址https://www.toymoban.com/news/detail-856017.html

// 使用私钥加密,使用公钥解密
encryptedString = encrypt(text, getPrivateKey(pubKeyFilePathInClasspath));
decryptedString = decrypt(encryptedString, getPublicKey(priKeyFilePathInClasspath));

到了这里,关于Java RSA加解密-非对称加密-公钥私钥加解密(使用hutool工具)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# .NET CORE .NET6 RSA 公钥加密 私钥解密

    环境说明: .NET CORE 版本:.NET 6 。   .NET CORE 对于RSA的支持: 1. .NET 6 中内置了对 PKCS1,PKCS8 2种私钥格式的支持。 2. 如果你要部署在Linux,docker ,k8s 中;一定要用 “RSA”这个类,不能是 .NET FRAMEWORK 的 RSACryptoServiceProvider。 3. .NET 中默认加密算法为“RSA/ECB/PKCS1Padding” ,要和JAVA互通

    2024年02月08日
    浏览(70)
  • 国密sm2公钥加密 私钥解密java代码实现

    目录 一、引入jar包 二、生成秘钥对,加解密工具类

    2024年02月11日
    浏览(45)
  • RSA加密,公钥、私钥的生成,前端使用公钥加密,JSEncrypt返回值为false的原因以及解决方法,XML转换Pkcs1、8

    非对称加密算法,两个且不同的Key,一个公开,一个私密,公开加密,私密解密。 特点: 原文短,加密后密文长 生成相对较慢 安全性超强 我们使用.net进行生成公钥、私钥。 使用RSA.ToXmlString(Boolean) 方法生成公钥以及私钥,方法中接收一个参数, true  表示同时包含 RSA 公钥

    2024年01月21日
    浏览(43)
  • 使用非对称加密(RSA) 实现前端加密后端解密

    数据加密方式有: 单向加密、对称加密、非对称加密、加密盐、散列函数、数字签名。 1、单向加密 单向加密通过对数据进行摘要计算生成密文,密文不可逆推还原。只能加密,不能解密,常用于提取数据的指纹信息以此来验证数据的完整性。但是会引发雪崩效应(雪崩效应

    2024年02月08日
    浏览(45)
  • RSA 公私钥加解密Java实现

    1.简单快速集成,饮用hutool工具包实现 1)引入hutool包 2) 制作好自己的rsa公私钥文件,通过openssl实现即可,直接放到resources下面  3)读取rsa文件,进行加解密实现,公钥加密,私钥解密,注意点都在里面注释了。 2.不借助工具,直接引用java security包实现功能 1)公私钥依然

    2024年02月10日
    浏览(21)
  • 私钥和公钥到底是谁来加密、谁来解密?

    1.  应用场景 场景1(第一种用法):用于信息加解密,此时使用公钥加密,私钥解密。 场景2(第二种用法):用于数字签名,此时使用私钥签名,公钥验签。 有点混乱,不要去硬记,你只要这样想即可: - 既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解

    2023年04月15日
    浏览(55)
  • 使用RSA生成公钥和私钥

    可以用keytool工具直接生成,需要openssl工具Binaries - OpenSSLWiki设置到环境变量里 生成的authkey放到gateway下,生成的auth.jks放到auth认证服务下 网关结合鉴权,需要配置如下配置文件                 认证服务配置Bean 接口AuthToolController RSAUtil 依赖 访问localhost:6080/generate/do

    2024年02月12日
    浏览(33)
  • RSA算法习题 (采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。)

    1、采用RSA算法,其中e=7,p=11,q=13,求出公钥和私钥,并求出明文85进行加密后的密文。 2. 找出质数 P、Q P=11 Q=13 3. 计算公共模数 N = P * Q = 143 4. 欧拉函数 Φ(N) = (P-1)*(Q-1) = 10 *12 = 120 5. 计算公钥E 1Eφ(N) 所以1E120 E的取值范围{3,7,9,11,13,17,19,...,117,119} E的取值必须和φ(N)互质 取

    2024年02月09日
    浏览(70)
  • 【openssl】RSA 生成公钥私钥 |通过私钥获取公钥

    通过博客:Window系统如何编译openssl 编译出openssl.exe(位于apps文件夹下)。 现在需要使用它获得公钥私钥、通过私钥获取公钥 目录 说明!!! 一.定位openssl.exe目录 二、进入命令cmd 三、生成私钥 四、已知的私钥替换模板私钥 五、通过私钥生成公钥 a.生成公钥私钥:跳过第四

    2024年02月04日
    浏览(41)
  • 若依ruoyi前端vue使用jsencrypt.js加密后端java进行RSA解密(前后端交互RSA加解密)

    目录 1、前后端RSA加解密实现思路 2、前端 3、后端 按照约定来说公钥一般用来加密,大家都可以获取得到,私钥用来解密,当然你也可以混着用,以下示例是前端通过加密,后端解密.  -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ81AMIIBCgKCAQEA1+05vAf7m5NcLNLkRtsm gp+QdzcW6MVdayGTGBJG0v

    2024年02月06日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包