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.rhkb.cn/news/221378.html

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

相关文章

网络基础介绍

1.网线制作 1.1 网线制作需要的工具 网线 网线钳 水晶头 测试仪 ​编辑 1.2 网线的标准 1.3 网线的做法 2.集线器&交换机&路由器的介绍 3.OSI七层模型 4.路由器的设置 4.1 常见的路由器设置地址 4.2 常见的路由器账号密码 4.3 登录路由器 设置访客网…

【Axure RP9】中继器应用及相关案例

一 中继器简介 1.1 中继器是什么 中继器(Repeater)是一种高级的组件(Widget),用于显示文本、图像和其他元素的重复集合。它是一个容器,容器中的每一个项目称作“item”,由于“item”中的数据由…

【Spark精讲】Spark五种JOIN策略

目录 三种通用JOIN策略原理 Hash Join 散列连接 原理详解 Sort Merge Join 排序合并连接 Nested Loop 嵌套循环连接 影响JOIN操作的因素 数据集的大小 JOIN的条件 JOIN的类型 Spark中JOIN执行的5种策略 Shuffle Hash Join Broadcast Hash Join Sort Merge Join C…

【面试】Java最新面试题资深开发-微服务篇(1)

问题九:微服务 什么是微服务架构?它与单体架构相比有哪些优势和劣势?解释一下服务发现和服务注册是什么,它们在微服务中的作用是什么?什么是API网关(API Gateway)?在微服务中它有何…

issue阶段的选择电路的实现

1-of-M的仲裁电路 为什么要实现oldest-first 功能的仲裁呢? 这是考虑到越是旧的指令,和它存在相关性的指令也就越多,因此优先执行最旧的指令,则可以唤醒更多的指令,能够有效地提高处理器执行指令的并行度,而且最旧的指…

德人合科技 | 公司电脑文件加密系统

公司电脑文件加密系统是一种可以对电脑文件进行加密的保护机制。它使用驱动层透明加密技术,能够在用户无感知的情况下对文件进行加密,从源头上保障数据安全和使用安全。 PC端访问地址: www.drhchina.com 此类系统主要有以下几个特点和功能&a…

免 费 搭 建 小程序商城,打造多商家入驻的b2b2c、o2o、直播带货商城

在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、…

基于RocketMQ实现分布式事务

前言 在上一篇文章Spring Boot自动装配原理以及实践我们完成了服务通用日志监控组件的开发,确保每个服务都可以基于一个注解实现业务功能的监控。 而本文我们尝试基于RocketMQ实现下单的分布式的事务。可能会有读者会有疑问,之前我们不是基于Seata完成了…

【K8S基础】-k8s的核心概念pod

一、Pod 是什么 1.1 Pod 的定义和概念 在Kubernetes中,Pod是创建或部署的最小/最简单的基本单位。一个Pod代表着集群上正在运行的一个进程,它封装了一个或多个应用容器,并且提供了一些共享资源,如网络和存储,每个Pod…

nbcio-boot的flowable流程模型查询修正为按发布时间倒序

更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H5) : http://122.227.135.243:9888 之前…

部署智能合约以及 javascript 调用合约函数(Web3项目二实战之三)

在上一篇 智能合约是Web3项目的核心要务(Web3项目二实战之二) ,我们已然为项目编写了智能合约,在攥写完智能合约后,该项目将完成了一大部分,剩下无非就是用户界面交互的内容。 然而,在码完了智能合约代码后,起着承前启后关键性的便是,前端界面与智能合约的交互。 智能…

机器学习---聚类(原型聚类、密度聚类、层次聚类)

1. 原型聚类 原型聚类也称为“基于原型的聚类” (prototype-based clustering),此类算法假设聚类结构能通过一 组原型刻画。算法过程:通常情况下,算法先对原型进行初始化,再对原型进行迭代更新求解。著 名的原型聚类算法&#…

服务器数据恢复-EMC存储raid5磁盘物理故障离线的数据恢复案例

服务器数据恢复环境&故障: 一台emc某型号存储服务器,存储服务器上组建了一组raid5磁盘阵列,阵列中有两块磁盘作为热备盘使用。存储服务器在运行过程中有两块磁盘出现故障离线,但是只有一块热备盘激活,最终导致该ra…

安卓小练习-校园闲置交易APP(SQLite+SimpleCursorAdapter适配器)

环境: SDK:34 JDK:20.0.2 编写工具:Android Studio 2022.3.1 整体效果(视频演示): 小练习-闲置社区APP演示视频-CSDN直播 部分效果截图: 整体工作流程: 1.用户登录&…

【计算机网络】TCP协议——2.连接管理(三次握手,四次挥手)

目录 前言 一. 建立连接——三次握手 1. 三次握手过程描述 2. TCP连接建立相关问题 二. 释放连接——四次挥手 1. 四次挥手过程描述 2. TCP连接释放相关问题 三. TCP状态转换 结束语 前言 TCP——传输控制协议(Transmission Control Protocol)。是一种面向连接的传…

web前端游戏项目-雷霆战机飞机大战游戏【附源码】

文章目录 一:雷霆战机HTML源码:JS文件:(1)function.js(2)impact.js(3)move.1.1.js(4)script.js 二:飞机大战HTML源码:CSS源…

MySQL——表的增删查改

目录 一.Create(创建) 1.单行数据 全列插入 2.多行数据 指定列插入 3.插入否则更新 4. 替换 二.Retrieve(读取) 1. select 列 查询 2.where 条件 3.结果排序 4.筛选分页结果 三.Update (修改)…

【改进YOLOv8】磁瓦缺陷分类系统:改进LSKNet骨干网络的YOLOv8

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 近年来,随着智能制造产业的不断发展,基于人工智能与机器视觉的自动化产品缺陷检测技术在各行各业中得到了广泛应用。磁瓦作为永磁电机的主…

4.3 C++对象模型和this指针

4.3 C对象模型和this指针 4.3.1 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include <iostream>class Person { public:Person() {mA 0;} //非静态成员变量占对象空间int mA;//静态成员变量…

AXure的情景交互

目录 导语&#xff1a; 1.erp多样性登录界面 2.主页跳转 3.省级联动​编辑 4. 下拉加载 导语&#xff1a; Axure是一种流行的原型设计工具&#xff0c;可以用来创建网站和应用程序的交互原型。通过Axure&#xff0c;设计师可以创建情景交互&#xff0c;以展示用户与系统的交…