0%

AES 对称加密算法详解

AES(Advanced Encryption Standard,高级加密标准)是目前应用最广泛的对称加密算法之一,作为 DES 的替代者,它具有更高的安全性和效率,被广泛用于金融、通信、数据存储等领域。

AES 的核心特性

  • 对称加密:加密和解密使用相同的密钥,这意味着通信双方需要共享同一个密钥。
  • 安全性高:相比 DES 算法,AES 的密钥长度更长(支持 128 位、192 位、256 位),抗暴力破解能力更强。
  • 效率优异:在硬件和软件环境中都能高效实现,适合处理大量数据的加密。
  • 应用广泛:是美国联邦政府采用的加密标准,也是众多行业的首选加密方案。

代码解析:AES 加密与解密过程

加密流程(aesEncode方法)

  1. 初始化随机数生成器

    1
    2
    SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
    random.setSeed("PASSWORD_CRYPT_KEY".getBytes());

    通过指定种子(这里使用 “PASSWORD_CRYPT_KEY”)确保密钥生成的一致性,相同的种子会生成相同的密钥。

  2. 生成密钥

阅读全文 »

消息摘要算法详解

消息摘要算法是密码学中的重要组成部分,主要用于验证数据的完整性,确保数据在传输或存储过程中未被篡改。这类算法通过对原始数据进行处理,生成一个固定长度的 “摘要”(也称为哈希值或散列值),该摘要具有唯一性和不可逆性,成为数据的 “数字指纹”。

消息摘要算法的核心特性

  • 单向性:从原始数据生成摘要很容易,但无法从摘要反推原始数据。
  • 唯一性:不同的原始数据几乎不可能生成相同的摘要(哈希碰撞概率极低)。
  • 固定长度:无论原始数据大小如何,生成的摘要长度固定。
  • 敏感性:原始数据的微小变化会导致摘要发生巨大改变。

三大系列消息摘要算法

MD 算法(Message Digest)

MD 算法是早期的消息摘要算法系列,由 Ronald L. Rivest 设计,主要代表为MD5

MD5 的特点
  • 生成128 位的信息摘要(二进制),转换为十六进制后为 32 位字符串。
  • 运算速度快,但安全性已被攻破(存在实际的碰撞案例)。
  • 目前更多用于非安全性要求极高的场景,如文件校验、数据一致性验证等。
MD5 的 Java 实现示例
阅读全文 »

汉语拼音转换工具 pinyin4j 实战:基础用法与多音字处理全指南

在中文数据处理场景中(如搜索推荐、排序、拼音检索),经常需要将汉字转换为汉语拼音。pinyin4j 是一款经典的 Java 拼音转换工具,支持全拼、简拼、声调标注等功能。本文将详细讲解 pinyin4j 的基础用法、多音字问题及解决方案,帮助你在实际开发中精准处理拼音转换需求。

pinyin4j 基础入门

引入依赖

pinyin4j 是开源工具,可通过 Maven 或 Gradle 引入项目:

Maven 依赖

1
2
3
4
5
<dependency>  
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version> <!-- 最新稳定版 -->
</dependency>

Gradle 依赖

1
implementation 'com.belerweb:pinyin4j:2.5.1'  

核心类与基础用法

pinyin4j 的核心功能通过 PinyinHelper 工具类实现,配合 HanyuPinyinOutputFormat 配置输出格式(如声调、大小写)。

基本拼音转换

将单个汉字转换为拼音(支持多音字返回多个结果):

阅读全文 »

带附件邮件发送全指南:基于 Spring 与 Apache Commons Email 的实现

在日常开发中,带附件的邮件发送是常见需求(如报表推送、文件共享等)。本文将详细讲解两种实现方式:Spring 的 MimeMessageHelper(适合 Spring 生态项目)和 Apache Commons Email(通用 Java 项目),包括依赖配置、核心代码、参数说明及常见问题解决,帮助你快速集成邮件附件功能。

技术选型对比

实现方式 优势 适用场景
Spring MimeMessageHelper 与 Spring 无缝集成,API 简洁,支持 HTML 内容 Spring Boot/SSM 项目
Apache Commons Email 轻量级,无 Spring 依赖,配置灵活 非 Spring 项目或简单 Java 应用

Spring 方式:使用 MimeMessageHelper

依赖配置

需引入 Spring 邮件相关依赖(适用于 Spring 项目):

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Spring 邮件支持 -->  
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.29.RELEASE</version> <!-- 版本需与项目 Spring 版本匹配 -->
</dependency>

<!-- JavaMail 核心依赖 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>

核心代码实现

MimeMessageHelper 是 Spring 提供的邮件辅助类,支持附件、HTML 内容等功能:

阅读全文 »

POI操作EXCEL合并单元格详解

在使用 POI 处理 Excel 时,合并单元格是常见需求,比如制作表头、合并相同内容的单元格等。下面详细介绍如何通过 POI 实现单元格合并,并补充相关注意事项。

核心类与方法

POI 中合并单元格的核心类是 CellRangeAddress,通过它定义需要合并的单元格范围,再调用工作表的 addMergedRegion 方法完成合并。

  • CellRangeAddress 构造方法
    用于定义合并的单元格区域,参数含义如下:

    1
    CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
    • firstRow:起始行索引(从 0 开始)
    • lastRow:终止行索引(包含)
    • firstCol:起始列索引(从 0 开始)
    • lastCol:终止列索引(包含)
  • Sheet.addMergedRegion 方法
    将定义好的单元格范围添加到工作表中,完成合并:

    1
    sheet.addMergedRegion(cellRangeAddress);

示例代码

以下是一个完整的示例,演示如何在 Excel 中合并单元格(以 XSSF 为例,适用于.xlsx格式):

maven依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
阅读全文 »