Java密码学之加解密

前篇:Java密码学之数字签名_东皋长歌的博客-CSDN博客

日常开发中用的比较多的功能点,加解密数据,用Java实现也是很快很实用。

下面记录一下加解密数据的过程。

1,创建密钥对生成器

KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

2,初始化密钥

keyPairGen.initialize(2048);

3,生成密钥对

KeyPair pair = keyPairGen.generateKeyPair();

4,创建加密对象

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

5,用公钥初始化加密对象

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

6,添加待加密内容到加密对象

byte[] input = "Welcome to Shenzhen".getBytes();
cipher.update(input);

7,使用公钥加密内容

byte[] cipherText = cipher.doFinal();
System.out.println( "加密后的内容:"+new String(cipherText, "UTF8"));

8,用私钥初始化加密对象,使用DECRYPT_MODE

cipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());

9,解密密文

byte[] decipheredText = cipher.doFinal(cipherText);
System.out.println("解密后的内容:"+new String(decipheredText));

10,完整过程

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.UnsupportedEncodingException;
import java.security.*;public class CipherDemo {public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {//创建密钥对生成器,后面算法选择有: DiffieHellman,DSA,RSA 三种,如果是其他的话,就会抛出异常NoSuchAlgorithmExceptionKeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");//初始化密钥生成器,一般长度要大于待加密内容keyPairGen.initialize(2048);//生成密钥对KeyPair pair = keyPairGen.generateKeyPair();//获取公钥PublicKey publicKey = pair.getPublic();//创建加密对象,后面内容为填充算法,RSA/ECB/PKCS1Padding,RSA/ECB,RSA//PKCS1Padding,RSA 4种选择,如果不在这里面会抛出异常NoSuchAlgorithmException,NoSuchPaddingExceptionCipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");//用公钥初始化加密对象,模式有ENCRYPT_MODE,DECRYPT_MODE,WRAP_MODE,UNWRAP_MODE 4种模式cipher.init(Cipher.ENCRYPT_MODE, publicKey);//添加待加密内容到加密对象byte[] input = "Welcome to Shenzhen".getBytes();cipher.update(input);//使用公钥加密内容byte[] cipherText = cipher.doFinal();System.out.println( "加密后的内容:"+new String(cipherText, "UTF8"));//用私钥初始化加密对象,使用DECRYPT_MODEcipher.init(Cipher.DECRYPT_MODE, pair.getPrivate());//解密密文byte[] decipheredText = cipher.doFinal(cipherText);System.out.println("解密后的内容:"+new String(decipheredText));}
}

注意要结合自己项目里实际场景使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/108052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第29章_瑞萨MCU零基础入门系列教程之改进型环形缓冲区

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…

Qt应用开发(基础篇)——普通按钮类 QPushButton QCommandLinkButton

一、前言 QPushButton类继承于QAbstractButton,是一个命令按钮的小部件。 按钮基类 QAbstractButton 按钮或者命令按钮是所有图形界面框架最常见的部件,当按下按钮的时候触发命令、执行某些操作或者回答一个问题,典型的按钮有OK,A…

F. Magic Will Save the World(DP)

Problem - F - Codeforces 黑暗势力的传送门在世界边界打开了,现在整个世界都面临着可怕的威胁。为了关闭传送门并拯救世界,你需要一个接一个地击败n个从传送门中出现的怪物。 只有女巫Vika能够应对这个威胁。她有两个魔法力量——水之魔法和火之魔法。…

Java学习之--类和对象

💕粗缯大布裹生涯,腹有诗书气自华💕 作者:Mylvzi 文章主要内容:Java学习之--类和对象 类和对象 类的实例化: 1.什么叫做类的实例化 利用类创建一个具体的对象就叫做类的实例化! 当我们创建了…

数据在内存中的存储——练习3

题目&#xff1a; 3.1 #include <stdio.h> int main() {char a -128;printf("%u\n",a);return 0; }3.2 #include <stdio.h> int main() {char a 128;printf("%u\n",a);return 0; }思路分析&#xff1a; 首先二者极其相似%u是无符号格式进行…

Qt点亮I.MX6U开发板的一个LED

本篇开始将会介绍与开发版相关的Qt项目&#xff0c;首先从点亮一个LED开始。I.MX6U和STM32MP157的相关信息都会用到&#xff0c;但是后期还是将I.MX6U的学习作为重点。当然其他开发版的开发也可以参考本博文。 文章目录 1. Qt是如何操控开发板上的一个LED2. 出厂内核设备树中注…

C++面试/笔试准备,资料汇总

文章目录 后端太卷&#xff0c;建议往嵌入式&#xff0c;qt&#xff0c;测试&#xff0c;音视频&#xff0c;C一些细分领域投简历。有任何疑问评论区聊&#xff0c;我看到了回复 C面试/笔试准备&#xff0c;资料汇总自我介绍项目实习尽可能有1.编程语言&#xff1a;一.熟悉C语言…

interview3-微服务与MQ

一、SpringCloud篇 &#xff08;1&#xff09;服务注册 常见的注册中心&#xff1a;eureka、nacos、zookeeper eureka做服务注册中心&#xff1a; 服务注册&#xff1a;服务提供者需要把自己的信息注册到eureka&#xff0c;由eureka来保存这些信息&#xff0c;比如服务名称、…

UMA 2 - Unity Multipurpose Avatar☀️八.UMA内置实用Recipes插件

文章目录 🟥 UMA内置Recipes位置🟧 CapsuleCollider🟨 Expressions : 表情管理(重点)🟩 Locomotion : 移动测试的插件🟦 Physics : Collider升级版🟥 UMA内置Recipes位置 如下图所示,UMA共内置5种实用Recipes,文件夹内的Text Recipes类型的文件即是实用Recipes. …

【Unity3D】UI Toolkit数据动态绑定

1 前言 本文将实现 cvs 表格数据与 UI Toolkit 元素的动态绑定。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容。 UI Toolkit简介UI Toolkit容器UI Toolkit元素UI Toolkit样式选择器UI Toolkit自定义元素 本文完整资源见→UI Toolkit数据动态绑定。 2 数据…

科学中的人工智能:量子、原子和连续体技术概述

人工智能&#xff08;AI&#xff09;的进步正在推动自然科学领域的一种新的发现范式。如今&#xff0c;AI已经开始通过改进、加速和促进我们对各种空间和时间尺度上自然现象的理解来推动自然科学的发展&#xff0c;催生了一个被称为AI for science&#xff08;AI4Science&#…

VMware虚拟机安装运行MacOS系统

VMware虚拟机安装运行MacOS系统 1. VMware虚拟机安装运行MacOS系统1.1. 前期准备 2. 解锁虚拟机MacOS2.1. 解锁后效果 3. 开始安装MacOS系统3.1. 选择系统3.2. 虚拟机磁盘3.3. 镜像 4. 开机配置4.1. MacOS图标4.2. 磁盘4.2.1. 磁盘配置4.2.2. 抹掉数据 4.3. 安装系统4.3.1. 安装…