java中常用的加密算法总结

目前在工作中常用到加密的一些场景,比如密码加密,数据加密,接口参数加密等,故通过本文总结以下常见的加密算法。
在这里插入图片描述

1. 对称加密算法

对称加密算法使用相同的密钥进行加密和解密。在Java中,常见的对称加密算法包括:

  • AES(高级加密标准):AES是一种高效且安全的对称加密算法,支持128位、192位和256位密钥长度,用于加密敏感数据。

    • CBC模式(Cipher Block Chaining)
      在CBC模式中,每个明文块在加密之前都会与前一个密文块进行异或运算,然后再进行加密。这种模式下,初始块需要一个初始化向量(IV),并且对每个后续块的加密都依赖于前一个块的密文。
    • 优点:提供了更高的安全性,相比ECB模式更难受到攻击。
      对相同的明文块会生成不同的密文块,增强了安全性。
    • 缺点:不适合并行加密处理,因为每个密文块的生成都依赖于前一个密文块。
  • ECB模式(Electronic Codebook)

    • 在ECB模式中,相同的明文块会被加密成相同的密文块,因此这种模式下可能会有一些安全性问题。同一个明文块每次加密的结果都是相同的,这可能导致一些模式识别攻击。
    • 优点:可以并行处理数据块。
    • 缺点:相同的明文块会得到相同的密文块,可能会暴露信息模式。
      安全性相对较低,容易受到已知明文攻击等攻击方式的影响。
      在实际应用中,CBC模式通常比ECB模式更安全,因为它提供了更好的混淆和扩散特性。为了进一步提高安全性,可以考虑使用认证加密模式(Authenticated Encryption Modes)如GCM(Galois/Counter Mode)或CCM(Counter with CBC-MAC)。
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;//AES加密解密工具类
public class AESUtil {private static final String AES_ALGORITHM = "AES";private static final String CIPHER_MODE = "AES/CBC/PKCS5Padding";private static final String INIT_VECTOR = "YourInitVector"; // 初始化向量private static final String SECRET_KEY = "YourSecretKey"; // 密钥public static String encrypt(String plainText) {try {IvParameterSpec iv = new IvParameterSpec(INIT_VECTOR.getBytes(StandardCharsets.UTF_8));SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM);Cipher cipher = Cipher.getInstance(CIPHER_MODE);cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);byte[] encryptedBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));return Base64.getEncoder().encodeToString(encryptedBytes);} catch (Exception e) {e.printStackTrace();return null;}}public static String decrypt(String encryptedText) {try {IvParameterSpec iv = new IvParameterSpec(INIT_VECTOR.getBytes(StandardCharsets.UTF_8));SecretKeySpec secretKeySpec = new SecretKeySpec(SECRET_KEY.getBytes(StandardCharsets.UTF_8), AES_ALGORITHM);Cipher cipher = Cipher.getInstance(CIPHER_MODE);cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));return new String(decryptedBytes, StandardCharsets.UTF_8);} catch (Exception e) {e.printStackTrace();return null;}}public static void main(String[] args) {String originalText = "Hello, World! This is a test message.";// 加密String encryptedText = encrypt(originalText);System.out.println("Encrypted Text: " + encryptedText);// 解密String decryptedText = decrypt(encryptedText);System.out.println("Decrypted Text: " + decryptedText);}
}
  • DES(数据加密标准):虽然已逐渐被AES取代,但DES仍被广泛使用。它使用56位密钥,对数据进行加密。

  • 3DES(Triple DES):是对DES进行多次迭代的改进版本,提高了安全性。

对称加密算法适合在数据传输过程中加密数据,但需要注意密钥管理和安全分发问题。

2. 非对称加密算法

非对称加密算法使用公钥私钥进行加密和解密。在Java中,最常用的非对称加密算法是:

  • RSA(Rivest-Shamir-Adleman):RSA是一种流行的非对称加密算法,用于数字签名和密钥交换。

  • DSA(数字签名算法):用于数字签名,验证数据的真实性和完整性。

非对称加密算法可以用于安全地交换密钥,也可用于数字签名和数据加密。

3. 哈希函数

哈希函数是一种单向加密算法,将任意长度的数据映射成固定长度的唯一哈希值。在Java中,常见的哈希函数有:

  • MD5:虽然MD5易受到碰撞攻击,但仍被广泛使用。

  • SHA-1、SHA-256、SHA-512:安全性更高的哈希算法,提供不同长度的哈希值。

哈希函数通常用于密码存储数字签名数据完整性验证

4. 消息摘要算法

消息摘要算法类似于哈希函数,但用于生成固定长度的数据摘要。Java中常用的消息摘要算法有:

  • MD5
  • SHA系列
    消息摘要算法常用于数据完整性验证和数字签名。

5. 密码学工具包

Java提供了javax.crypto和java.security等密码学工具包,使开发者能够轻松实现各种加密算法。这些工具包提供了对加密、解密、数字签名和密钥管理的支持。

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

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

相关文章

机器人也能干的更好:RPA技术的优势和应用场景

RPA是什么? 机器人流程自动化RPA(Robotic Process Automation)是一种自动化技术,它使用软件机器人来高效完成重复且有逻辑性的工作。近年来,随着人工智能和自动化技术的不断发展和普及,RPA已经成为企业提高…

模拟信号和数字信号的区别

模拟和数字信号是携带信息的信号类型。两种信号之间的主要区别在于模拟信号具有连续电信号,而数字信号具有非连续电信号。 模拟信号和数字信号之间的差异可以通过不同类型波的例子来观察。 什么是模拟信号(Analog Signals)? 许多系统使用模拟信号来传输…

基于SpringBoot+Vue的小区物业管理系统

基于SpringBootVue的小区物业管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 房屋类型 论坛 登录界面 管理员界面 员工界面 摘要 小区物业管理系统是一个…

翻译: LLMs离通用人工智能AGI有多远 20个小时学会开车 Artificial General Intelligence

AGI,即人工通用智能,是一个令人兴奋的概念。我认为围绕它的一些混淆源于“通用”这个词的使用。正如您所知,人工智能是一种通用技术,意味着它对许多不同的事情都有用。大型语言模型的崛起导致了像ChatGPT这样的单一模型可以用于许…

鸿蒙(HarmonyOS)应用开发—— video组件实操

video 组件 harmonyOS 系统提供了基础的video。下面就直接上代码 原始video 新建项目 customVideo项目 本地视频 网络地址,就不用说明,只需要把地址换成网络地址即可 在resource 文件夹下的rawfile文件夹下 添加视频 在index.ets Video({src:$rawf…

自动化测试工具——Monkey

前言: 最近开始研究Android自动化测试方法,整理了一些工具、方法和框架,其中包括android测试框架,CTS、Monkey、Monkeyrunner、benchmark,以及其它test tool等等。 一、 什么是Monkey Monkey是Android中的一个命令行…

Mybatis-Plus讲义v1.0

Mybatis-Plus 课程目标 了解Mybatis-Plus 整合Mybatis-Plus 通用CRUD Mybatis-Plus的配置 条件构造器 Mybatis-Plus 的Service封装 代码生成器 1 Mybatis-Plus介绍 1.1 Mybatis-Plus介绍 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具&…

Ubuntu-20.04.2 mate 上安装、配置、测试 qtcreator

一、从repo中安装 Ubuntu-20.04.2的repo中,qtcreator安装包挺全乎的,敲完 sudo apt install qtcreator 看一下同时安装和新软件包将被安装列表,压缩包252MB,解压安装后933MB,集大成的一包。 sudo apt install qtcrea…

现代雷达车载应用——第3章 MIMO雷达技术 3.2节 汽车MIMO雷达波形正交策略

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 3.2 汽车MIMO雷达波形正交策略 基于MIMO雷达技术的汽车雷达虚拟阵列合成依赖于不同天线发射信号的可分离性。当不同天线的发射信号正交时&#x…

软件设计模式:UML类图

文章目录 前言一、📖设计模式概述1.软件设计模式的产生背景2.软件设计模式3.设计模式分类 二、📣UML图1.类图概述2.类的表示法3.类与类之间的关系关联关系(1)单向关联(2)双向关联(3)…

CCF编程能力等级认证GESP—C++6级—20230923

CCF编程能力等级认证GESP—C6级—20230923 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)小杨买饮料小杨的握手问题 答案及解析单选题判断题编程题1编程题…

vba中字典的应用实例

vba中熟练使用字典可以帮我们解决很多问题,以下为字典的应用方法及案例: Sub dictionary() Dim d As New dictionary 定义字典 Dim mykey As Variant Dim myitems d.Add "1100000", "身份证" 字典录入key关键字和item条目 d.Add &q…

C语言归并排序(合并排序)算法以及代码

合并排序是采用分治法,先将无序序列划分为有序子序列,再将有序子序列合并成一个有序序列的有效的排序算法。 原理:先将无序序列利用二分法划分为子序列,直至每个子序列只有一个元素(单元素序列必有序),然后再对有序子序…

AtCoder Beginner Contest 333 A~F

A.Three Threes&#xff08;循环&#xff09; 题意&#xff1a; 给出一个正整数 N N N&#xff0c;要求输出 N N N个 N N N 分析&#xff1a; 按要求输出即可 代码&#xff1a; #include <bits/stdc.h> using namespace std;void solve() {int n;cin >> n;fo…

「遮天」段德互坑叶凡,期满至宝绿铜下落,老疯子限定回归

Hello,小伙伴们&#xff0c;我是拾荒君。 《遮天》第36集已经更新了&#xff0c;我迫不及待地跟随漫迷的脚步&#xff0c;前往观看。这一集中&#xff0c;叶凡在途中偶遇了一个醉酒的段德。这个段德之前曾沦陷在阴坟之中&#xff0c;如今能够逃出&#xff0c;可见他的实力深不…

ADC模拟/数字转换器

ADC是什么&#xff1f; 全称&#xff1a; Analog-to-Digital Converter &#xff0c;指模拟 / 数字转换器 它是一种电子设备或电路&#xff0c;用于将连续的模拟信号转换为相应的数字形式&#xff0c;以便于数字系统进行处理。模拟信号是连续变化的&#xff0c;而数字系统则处…

sensitive-word 敏感词之 DFA 双数组实现源码学习

拓展阅读 敏感词工具实现思路 DFA 算法讲解 敏感词库优化流程 java 如何实现开箱即用的敏感词控台服务&#xff1f; 各大平台连敏感词库都没有的吗&#xff1f; v0.10.0-脏词分类标签初步支持 v0.11.0-敏感词新特性&#xff1a;忽略无意义的字符&#xff0c;词标签字典 …

分享一个项目——Sambert UI 声音克隆

文章目录 前言一、运行ipynb二、数据标注三、训练四、生成总结 前言 原教程视频 项目链接 运行一个ipynb&#xff0c;就可操作 总共四步 1&#xff09;运行ipynb 2&#xff09;数据标注 3&#xff09;训练 4&#xff09;生成 一、运行ipynb 等运行完毕后&#xff0c;获得该…

全国1900+监测站点空气质量日数据,shp/excel格式,2023年最新数据

基本信息. 数据名称: 全国1900监测站点空气质量监测日数据 数据格式: shpexcel 时间版本&#xff1a;2023年 数据几何类型: 点 数据精度&#xff1a;全国 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据字段&#xff1a; 序号字段名称字段说明1province省…

echarts饼图点击区块事件

loadEchart: function (echartname, data) {option {title: {text: ,subtext: ,left: center},tooltip: {trigger: item,formatter: {c}%},legend: {orient: vertical,left: left,},series: [{name: ,type: pie,radius: 70%,data: [[name>合同额,value>12312312],],labe…