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万+

张量积曲面:数学原理与Python实现

Suv∑i0m∑j0nPij⋅Bipu⋅BjqvSuvi0∑m​j0∑n​Pij​⋅Bip​u⋅Bjq​v其中PijP_{i,j}Pij​是控制点网格,BipuB_i^p(u)Bip​u和BjqvB_j^q(v)Bjq​v是基函数,分别沿uuu和vvv方向定义。

T20151470的博客 1156

java generatekey_Java中的KeyPairGenerator generateKeyPair()方法

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

weixin_35944439的博客 1894

Oracle 11g RAC 节点通信故障排查与修复指南

本文详细介绍了Oracle 11g RAC集群发生节点通信故障时的系统性排查与修复方法。当出现节点异常重启时,核心问题往往源于心跳网络中断。文章提供了从快速诊断、日志分析到六层深度检查的完整指南,并给出了针对网络配置、内核参数及Oracle已知Bug等常见根因的实战解决方案,帮助DBA快速恢复集群稳定。

weixin_29246195的博客 275

排队论在食堂窗口规划中的应用:M/M/S模型优化案例

本文通过食堂窗口规划的真实案例,详细阐述了如何运用排队论中的M/M/S模型量化服务效率。文章从问题拆解、数据采集、模型计算到成本效益分析,提供了完整的数学建模实战指南,帮助读者掌握利用最优化方法解决资源配置问题的核心流程与工具。

docker7nomad的博客 1084

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

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

fen_fen的专栏 4194

【阅读文献笔记】FoundationStereo: Zero-Shot Stereo Matching

提出首个零样本泛化立体匹配基础模型设计 STA 模块融合单目先验提出 AHCF 模块增强代价滤波构建 100 万合成数据集 FSD + 自净化流程。

qq_46460379的博客 1257

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

Python广度优先搜索BFS - 蓝桥13届省赛污染海域

请问这片N * M海域中有几块是没被污染的独立海域(没被污染的独立海域是指该块海域上下左右被已污染的海域包围,且N * M以外的海域都为已被污染的海域)有一片海域划分为N * M个方格,其中有些海域已被污染(用0表示),有些海域没被污染(用1表示)。第二行开始输入N行,每行M个数字(数字只能为1或者0,1表示没被污染的海域,0表示已被污染的海域)这块4 * 5的海域,有3块海域(绿色)没被污染,因为每一块的上下左右都被污染的海域包围。输出一个整数,表示N * M的海域中有几块是没被污染的独立海域。

m0_69865359的博客 265

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 359

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

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5229

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

财务数字化——解读美的战略规划之财务组织体系建设【附全文阅读】

本文提出适用于集团企业的财务管控方案,面向财务负责人、HR及战略规划人员。方案整合四种管控模式,结合500强案例,构建"职能定位-架构设计-权责划分-人才发展"体系,涵盖财务五大模块。通过明确总部与事业部权责边界,提供组织架构等实操框架,旨在平衡财务管控与业务支持,提升效率与风控能力,满足集团财务体系规范化建设需求。

cdfunlove的博客 663

VB摄像头监控

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

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

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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、付费专栏及课程。

余额充值