java-RSA算法加密工具的简单使用方法

java的rsa加密算法_用java编程实现RSA加密算法 RSA加密算法是目前应用最广泛的公钥加密算法,特别适用于通过Internet传送的数据,常用于数字签名和密钥交换。那么我今天就给大家介绍一下如何利用Java编程来实现RSA加密算法。一、RSA加密算法描述RSA加密算法是1978年提出的。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。由数论知识可知,若将一个具有大素数因子的合数进行分解是... 阅读详情

[原理]    RSA算法基于一个十分简单的数论事实:

              将两个大质数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

01)RSAUtil 工具类 :

package com.tcc.main.the.last;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;

import javax.crypto.Cipher;

/**
 * @Description 描述
 * @Date 2018年2月26日下午1:52:55
 */
public class RSAUtil {
    
    //生成密钥对
    public static KeyPair genKeyPair(int keyLength) throws Exception{
        KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(keyLength);      
        return keyPairGenerator.generateKeyPair();
    }
    
    //公钥加密
    public static byte[] encrypt(byte[] content, PublicKey publicKey) throws Exception{
        Cipher cipher=Cipher.getInstance("RSA");//java默认"RSA"="RSA/ECB/PKCS1Padding"
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(content);
    }
    
    //私钥解密
    public static byte[] decrypt(byte[] content, PrivateKey privateKey) throws Exception{
        Cipher cipher=Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(content);
    }

}

02)Base64Utils 工具类 : 

package com.tcc.main.the.last;

import java.io.UnsupportedEncodingException;

public class Base64Utils {
	private static char[] base64EncodeChars = new char[] { 'A', 'B', 'C', 'D',
			'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
			'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd',
			'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
			'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3',
			'4', '5', '6', '7', '8', '9', '+', '/' };
	private static byte[] base64DecodeChars = new byte[] { -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
			-1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59,
			60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
			10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1,
			-1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
			38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
			-1, -1 };

	/**
	 * 加密
	 * 
	 * @param data
	 * @return
	 */
	public static String encode(byte[] data) {
		StringBuffer sb = new StringBuffer();
		int len = data.length;
		int i = 0;
		int b1, b2, b3;
		while (i < len) {
			b1 = data[i++] & 0xff;
			if (i == len) {
				sb.append(base64EncodeChars[b1 >>> 2]);
				sb.append(base64EncodeChars[(b1 & 0x3) << 4]);
				sb.append("==");
				break;
			}
			b2 = data[i++] & 0xff;
			if (i == len) {
				sb.append(base64EncodeChars[b1 >>> 2]);
				sb.append(base64EncodeChars[((b1 & 0x03) << 4)
						| ((b2 & 0xf0) >>> 4)]);
				sb.append(base64EncodeChars[(b2 & 0x0f) << 2]);
				sb.append("=");
				break;
			}
			b3 = data[i++] & 0xff;
			sb.append(base64EncodeChars[b1 >>> 2]);
			sb.append(base64EncodeChars[((b1 & 0x03) << 4)
					| ((b2 & 0xf0) >>> 4)]);
			sb.append(base64EncodeChars[((b2 & 0x0f) << 2)
					| ((b3 & 0xc0) >>> 6)]);
			sb.append(base64EncodeChars[b3 & 0x3f]);
		}
		return sb.toString();
	}

	/**
	 * 解密
	 * 
	 * @param str
	 * @return
	 */
	public static byte[] decode(String str) {
		try {
			return decodePrivate(str);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return new byte[] {};
	}

	private static byte[] decodePrivate(String str)
			throws UnsupportedEncodingException {
		StringBuffer sb = new StringBuffer();
		byte[] data = null;
		data = str.getBytes("US-ASCII");
		int len = data.length;
		int i = 0;
		int b1, b2, b3, b4;
		while (i < len) {

			do {
				b1 = base64DecodeChars[data[i++]];
			} while (i < len && b1 == -1);
			if (b1 == -1)
				break;

			do {
				b2 = base64DecodeChars[data[i++]];
			} while (i < len && b2 == -1);
			if (b2 == -1)
				break;
			sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4)));

			do {
				b3 = data[i++];
				if (b3 == 61)
					return sb.toString().getBytes("iso8859-1");
				b3 = base64DecodeChars[b3];
			} while (i < len && b3 == -1);
			if (b3 == -1)
				break;
			sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2)));

			do {
				b4 = data[i++];
				if (b4 == 61)
					return sb.toString().getBytes("iso8859-1");
				b4 = base64DecodeChars[b4];
			} while (i < len && b4 == -1);
			if (b4 == -1)
				break;
			sb.append((char) (((b3 & 0x03) << 6) | b4));
		}
		return sb.toString().getBytes("iso8859-1");
	}

}
03)RSA_Test 测试类 :
package com.tcc.main.the.last;

import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;

/**
 * @Description 描述
 * @Date 2018年2月26日下午4:09:49
 */
public class RSA_Test {
    
    public static String data="Hello World!";

    public static void main(String[] args) throws Exception {
        
        //获取密钥对
        KeyPair keyPair=RSAUtil.genKeyPair(1024);
        
        //获取公钥,并以base64格式打印出来
        PublicKey publicKey=keyPair.getPublic();        
        System.out.println("公钥:"+new String(Base64Utils.encode(publicKey.getEncoded())));
        
        //获取私钥,并以base64格式打印出来
        PrivateKey privateKey=keyPair.getPrivate();     
        System.out.println("私钥:"+new String(Base64Utils.encode(privateKey.getEncoded())));
        
        //公钥加密
        byte[] encryptedBytes=RSAUtil.encrypt(data.getBytes(), publicKey);  
        System.out.println("加密后:"+Base64Utils.encode(encryptedBytes));
        
        //私钥解密
        byte[] decryptedBytes=RSAUtil.decrypt(Base64Utils.decode(Base64Utils.encode(encryptedBytes)), privateKey); 
        System.out.println("解密后:"+new String(decryptedBytes));
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
//        
//        //公钥加密
//        byte[] enBytes00=RSAUtil.encrypt(data.getBytes(), publicKey);
//        String encode00 = Base64Utils.encode(enBytes00);
//        System.out.println("加密后:"+encode00);
//        
//        实际使用当中是通过  encode00字符串,解密得到原文,而并非enBytes00数组
//        
//        //私钥解密
//        byte[] deBytes11=RSAUtil.decrypt(Base64Utils.decode(encode00), privateKey); 
//        System.out.println("解密后:"+new String(deBytes11));
        
    }
}



(尊重劳动成果,转载请注明出处:http://blog.youkuaiyun.com/UD_World/article/details/79378735 ud_world的博客)

RSA加密算法的简单案例 RSA加密算法是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击。 阅读详情

相关推荐

RSA加密算法和签名算法

RSA加密算法和签名算法 一、理论_来源于网上。 RSA加密算法 RSA公钥加密体制包含如下3个算法:KeyGen(密钥生成算法),Encrypt(加密算法)以及Decrypt(解密算法)。 。密钥生成算法以安全常数作为输入,输出一个公钥PK,和一个私钥SK。安全常数用于确定这个加密算法的安全性有多高,一般以加密算法使用的质数p的大小有关。越大,质数p一般越大,保证体制有更高的安全性。在R...

shuixiou1的博客 5349

JAVA 使用RSA算法进行数字签名验证-附完整代码

公司项目是有做资金管理相关的,涉及到充值,提现,转账等关键性的功能,需要保证数据传输的安全性,所以使用了较为简单的RSA进行生成秘钥且每个接口都需要做验签。RSA是一种非对称加密算法,它是由Rivest-Shamir-Adleman三位密码学家于1978年提出的。RSA算法的加密规则如下:钥匙生成:RSA算法使用两个密钥,一个是公钥(public key),用于加密数据,另一个是私钥(private key),用于解密数据。

qq_41831842的博客 7069

基于Java对RSA加密算法的实现

在Java中可使用Java Cryptography Extension (JCE)专用库实现。实现: 采用RSA密码技术保证重要数据在传输过程中的完整性。背景:解决敏感信息明文传输问题。

专注于计算机研发知识和资讯分享 405

springboot+dynamic-datasource多数据源配置动态切换

一、引入依赖 导入数据库驱动,数据库连接池(非必须),数据库操作框架。 <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <dependency> <gro

一起coding,一起嗨。 5652

使用Java实现RSA加密算法

简介:RSA加密算法是一种基于非对称密钥的加密技术,通过生成一对公私密钥来实现数据的加密和解密。该算法由Rivest、Shamir和Adleman在1977年提出,广泛应用于安全通信和数据保护。Java平台的Java Cryptography Extension (JCE)提供了实现RSA的工具和方法。本实现包含生成密钥对、加密和解密数据以及密钥存储与加载的详细步骤,并强调了安全存储私钥和选择适当密钥长度的重要性。此外,还指出了在实际应用中可能需要其他安全技术的集成,以及遵守加密法规的必要性。

weixin_33480380的博客 1533

使用Java实现RSA算法加密文件的全面指南

RSA算法,作为非对称加密领域的开山鼻祖,是信息安全的基石之一。其安全性基于数论难题——大整数的质因数分解。它由三个主要部分组成:密钥的生成、加密过程和解密过程。本章将引导您理解RSA算法的核心原理,探索它的基本组成,以及它如何在现代加密技术中发挥关键作用。通过对RSA的介绍,读者将会对公钥和私钥有所认识,并了解到它们在信息交换中的基本应用。这为深入探讨RSA在Java中的具体实现方式和密钥管理策略打下坚实的基础。

weixin_33256096的博客 1134

生成RSA公私钥工具类-KeyPairGenUtil

import sun.misc.BASE64Encoder; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.security.*; /** * Copyright (C), 2011-2018 {company} * FileName: com.huateng.util.Key...

weixin_42231507的博客 1万+

MPU6050芯片 寄存器详解与配置指南(详解)

分频值越小,数据刷新越快(如分频值 = 0 时,刷新率 = 8kHz/1=8kHz)。功能:配置采样频率分频系数,控制 ADC 转换速度和数据刷新率。数据刷新率 = 陀螺仪输出时钟频率 /(1 + 分频值)

m0_74696257的博客 1421

java generatekey_Java中的KeyPairGenerator generateKeyPair()方法

可以使用generateKeyPair()类java.security.KeyPairGenerator中的方法生成键对。此方法不需要任何参数,它返回生成的键对。每次generateKeyPair()调用该方法时,它都会生成一个新的键对。演示此的程序如下所示-示例importjava.security.*;importjava.util.*;publicclassDemo{public...

weixin_35944439的博客 1894

AI 代码生成工具的质量评估体系

基础需求层包括响应速度(Response Time)和界面友好性(UI Friendliness),期望需求层涵盖智能提示(Smart Suggestions)和个性化配置(Personalization),兴奋需求层则涉及多模态交互(Multimodal Interaction)和代码进化(Code Evolution)。在金融领域,代码审计合规性(Compliance Audit)权重应提升至40%,而在Web开发中,API兼容性(API Compatibility)的权重需达到35%。

2503_92418637的博客 3373

利用python爬取东方财富网股吧评论并进行情感分析(一)

利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示; 增加了 图片拖拽 功能,你可以将本地的图片直

YMG521000的博客 1万+

Java(110):非对称加密RSA的使用(KeyPair生成密钥)

Java(110):非对称加密RSA的使用(KeyPair生成密钥)

fen_fen的专栏 4194

幸狐RV1106开发板实战:5分钟搞定Yolo8模型部署(附避坑指南)

本文详细介绍了在幸狐RV1106开发板上快速部署YOLOv8模型的实战流程。通过RKNN-Toolkit2工具链,将ONNX模型转换为RV1106 NPU专用的RKNN格式,并完成交叉编译与上板运行。文章重点分享了环境搭建、模型转换的关键步骤以及常见的避坑指南,帮助开发者高效实现边缘AI目标检测应用。

weixin_28677451的博客 913

rsa算法java简单实现_RSA加密算法java简单实现方法(必看)

package security;import java.security.*;import java.security.spec.*;import java.security.interfaces.*;import javax.crypto.spec.*;import javax.crypto.interfaces.*;import java.io.*;import java.math.*;pu...

weixin_32687283的博客 407

RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling Overview of RRAM Physical Mechanism A general picture for the filamentary switching mechanism. Forming: 对本征RRAM样本,加电压VformingV_{forming}Vforming​,中间氧化层的O

Blog of Lucky H6 992

利用AI辅助工具Codex在30分钟内高效生成发明专利说明书草案

Codex 是什么?简单说,它是 OpenAI 推出的一个高级 AI 工作平台,最初定位是软件开发辅助工具,但现在它的能力边界已经远远超出了写代码。根据 OpenAI 官方信息,每周有超过 500 万人使用 Codex,其中 40% 的新用户是非开发者,包括分析师、营销人员、研究人员等。这意味着 Codex 正在从一个程序员专属工具,演变为一个面向广泛知识工作者的生产力中枢。 那么,它和我们今天要谈的“写发明专利”有什么关系?核心在于 Codex 的“角色专属插件”和“上下文构建”能力。它不再只是根据零散的

weixin_29053067的博客 320

RSA简单实现js加密、java后台解密

最近项目要求用rsa进行加密(老老实实用https它不香嘛,它不香嘛!),之前只用过别的,就临时抱了下佛脚,看了一下网上的教程,总结了一个比较简单的写法. 直接上代码: 显示RSA的公共类 package com.tungkong.sj.common.utils; import java.security.KeyFactory; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPub

不会编程的笨蛋的博客 954

Android功耗系列专题分析之四:待机概率性功耗高的失效分析

本文分析了Android设备待机功耗异常高的问题。通过日志发现系统休眠失败,原因是PowerManagerService.Display唤醒锁未被释放。进一步排查发现,指纹解锁功能在灭屏时未正确释放屏幕锁定,导致DisplayReady状态异常。解决方案是将指纹功能的背光控制与DisplayReady状态控制分离,使用两个变量独立管理。经验表明,快速定位问题比解决问题更重要,修改原生流程时需谨慎评估风险。

451

java数据加密解密代码_java使用RSA加密方式实现数据加密解密的代码

RSA的应用RSA是一种非对称加密算法。现在,很多登陆表单的密码的都采用RSA加密,例如京东中的登陆使用公钥对密码进行加密java使用RSA加密方式实现数据加密解密,需要首先产生私钥和公钥测试代码public static void main(String args[]){try {RSADemo rsa=new RSADemo();rsa.generateKey();byte[] data=rs...

weixin_30929623的博客 505

微软推出突破性AI医疗诊断系统MAI-DxO:诊断准确率85.5%,是医生的4倍,成本更低

微软推出医疗AI系统MAI-DxO,通过多AI模型协作实现高效诊断,准确率达85.5%,是传统医生团队的4倍。该系统整合自然语言处理、计算机视觉等技术,模拟专家会诊流程,显著降低医疗成本60%。具备罕见病识别、基层医疗支持等功能,同时注重伦理安全和可解释性。微软计划开放部分架构,推动医疗AI普惠化。这一突破标志着医疗AI从单点工具向系统级智能的跨越,有望重塑更精准、高效的智能医疗未来。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 637

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

rsa java demo_RSA加密java版demo

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.security.Key;import java.securi...

weixin_36024829的博客 434

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RSA算法DEMO

RSAUtils package com.test.demo; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import javax.crypto.Cipher; import java.io.ByteArrayOutputStream; import java.security.*; import java.security.interfaces.RSAPrivateKey;

疯狂撸代码的奋青博客 548

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RSA加密算法原理

目录: 一、什么是RSA加密算法: 二、RSA加密过程: 三、RAS解密过程: 四、生成密钥对: 五、实践: 六、Java进行 RSA 加解密时不得不考虑到的那些事儿: 一、什么是RSA加密算法: RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解...

张维鹏的博客 10万+

加密算法介绍及应用--RSA算法

在Android/Linux系统中,加密技术被用于如保护磁盘数据、音视频版权、认证支付、屏保/PIN等诸多场景,一般根据加密和解密两方使用的秘钥是否相同,可以分为对称加密和非对称加密,对称加密就是加解密使用相同的秘钥,AES加密算法就是最常见的对称加密算法;非对称加密就是加解密使用不同的秘钥,RSA加密算法就是最常见的非对称加密算法。

qq_39708261的博客 2366

Java中实现RSA非对称加密算法对数据进行加密解密

久等了,上篇文章的彩蛋部分来了,数据通信中,安全是至关重要的一环,常见的加密算法有AES对称加密算法,RSA非对称加密算法,本文将详细介绍如何在Java中实现RSA非对称加密算法对数据进行加密解密

牧泽的博客 2606

RSA加密算法工具类

RSA加密是一种非对称加密算法,由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年首次公开提出。RSA是他们三人姓氏的首字母组成的。RSA算法基于一个数学上的事实:将两个大质数相乘很容易,但是想要将其乘积分解成原始的质数因子却非常困难。这就是所谓的“陷门函数TDF”的概念,是RSA加密安全性的基础。

二掌柜的博客 2257
上一篇: ids for this class must be manually assigned before calling save() 异常
下一篇: com/alipay/api/AlipayApiException : Unsupported major.minor version 52.0
君不见#
博客等级 码龄10年 8粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值