在 Java 中,加密和解密通常通过 Java Cryptography Architecture (JCA)Java Cryptography Extension (JCE) 实现。以下是常见的加密和解密操作示例,包括对称加密(如 AES)和非对称加密(如 RSA)。


一、对称加密(AES 示例)

对称加密使用相同的密钥进行加密和解密。

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64; public class AESExample {
public static void main(String[] args) throws Exception {
// 生成密钥
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128位密钥
SecretKey secretKey = keyGen.generateKey(); // 加密
String originalText = "Hello, World!";
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] encryptedBytes = cipher.doFinal(originalText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("加密后: " + encryptedText); // 解密
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("解密后: " + decryptedText);
}
}

二、非对称加密(RSA 示例)

非对称加密使用公钥加密,私钥解密。

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64; public class RSAExample {
public static void main(String[] args) throws Exception {
// 生成密钥对
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
keyPairGen.initialize(2048); // 2048位密钥
KeyPair keyPair = keyPairGen.generateKeyPair(); // 加密
String originalText = "Hello, World!";
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] encryptedBytes = cipher.doFinal(originalText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("加密后: " + encryptedText); // 解密
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("解密后: " + decryptedText);
}
}

三、哈希算法(SHA-256 示例)

哈希算法用于生成不可逆的摘要信息。

import java.security.MessageDigest;
import java.util.HexFormat; public class SHA256Example {
public static void main(String[] args) throws Exception {
String originalText = "Hello, World!";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashBytes = digest.digest(originalText.getBytes());
String hashText = HexFormat.of().formatHex(hashBytes);
System.out.println("SHA-256 哈希值: " + hashText);
}
}

四、注意事项

  1. 密钥管理:密钥的安全性至关重要,建议使用安全的密钥存储和管理方式(如 KeyStore)。
  2. 算法选择:根据需求选择合适的加密算法(如 AES 用于对称加密,RSA 用于非对称加密)。
  3. 填充模式:加密时需指定填充模式(如 AES/CBC/PKCS5Padding),确保与解密方一致。
  4. 异常处理:加密解密操作可能抛出异常,需进行适当的异常处理。

五、常用加密算法

类型 算法 描述
对称加密 AES 高级加密标准,速度快
对称加密 DES/3DES 数据加密标准,较旧
非对称加密 RSA 基于大数分解,安全性高
非对称加密 ECC 椭圆曲线加密,密钥短效率高
哈希算法 SHA-256 生成 256 位哈希值
哈希算法 MD5 生成 128 位哈希值,已不安全

通过以上示例和说明,您可以在 Java 中实现基本的加密和解密操作。如果需要更复杂的功能(如数字签名、证书管理等),可以进一步研究 JCA 和 JCE 的高级特性。

Java 加密和解密的更多相关文章

  1. Java加密与解密笔记(一) Base64和数据摘要算法

    对加密解密下面的内容一定要先理解: 甲乙双方要通信,中间的连接可能被人窃听甚至篡改.解决办法就是把传输的内容进行加密,用密文去传输,这样即使被监听也没办法知道信息的具体内容. 加密时,甲乙双方可以约定 ...

  2. Java加密与解密笔记(三) 非对称加密

    非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...

  3. Java加密与解密笔记(四) 高级应用

    术语列表: CA:证书颁发认证机构(Certificate Authority) PEM:隐私增强邮件(Privacy Enhanced Mail),是OpenSSL使用的一种密钥文件. PKI:公钥 ...

  4. Java加密与解密笔记(二) 对称加密

    前面的仅仅是做了编码或者摘要,下面看看真正的加密技术. DES public class DESUtil { static final String ALGORITHM = "DES&quo ...

  5. Java加密与解密的艺术 读书心得

    现在项目中加密与解密的方式很多,很早就想整理一下Java中加密与解密的方式,读完<<Java加密与解密的艺术>>一书.借此机会梳理一下这方面的知识点 一.基础普及 安全技术目标 ...

  6. java 加密与解密艺术

    视频来自黑马程序员公开课 对称加密之后的密文可能存在乱码,这些乱码无法识别,信息经过加密后会变成一串毫无规律的二进制串,此时再选择一种编码方式来展示,通常是 BASE64 格式的编码. 为了解决这个问 ...

  7. AES Java加密 C#解密 (128-ECB加密模式)

    在项目中遇到这么一个问题: java端需要把一些数据AES加密后传给C#端,找了好多资料,算是解决了,分享一下: import sun.misc.BASE64Decoder; import sun.m ...

  8. Java加密、解密Word文档

    对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件.下面介绍了一种比较简单的方法给Word文件添加密码保护以及如何给已加密的Word文件取消密 ...

  9. java 加密与解密艺术二

    首先需要明确的是RSA的密钥对不能手动指定,需要通过代码系统生成 接下来我们来介绍下生成密钥对 package com.weiyuan.test; import java.security.KeyPa ...

  10. Java 加密、解密PDF文档

    本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...

随机推荐

  1. cento 申请ssl证书笔记

    如果您的Certbot工具没有内置的Nginx插件,您可以尝试以下方法来申请证书并配置Nginx服务器: 安装Certbot的Nginx插件: sudo yum install certbot-ngi ...

  2. 鸿蒙NEXT开发案例:九宫格随机

    [引言] 在鸿蒙NEXT开发中,九宫格抽奖是一个常见且有趣的应用场景.通过九宫格抽奖,用户可以随机获得不同奖品,增加互动性和趣味性.本文将介绍如何使用鸿蒙开发框架实现九宫格抽奖功能,并通过代码解析展示 ...

  3. Vue-Router 面试题 (2023-09-13更新)

    路由导航守卫 和 Vue 实例生成周期钩子函数的执行顺序? 路由导航守卫 都是在 Vue 实例生命周期钩子函数 之前执行的 Vue-Router 有哪几种导航钩子? 1. 全局守卫 全局前置守卫:be ...

  4. 2024年1月Java项目开发指南10:vite+Vue3项目创建

    新建项目 安装router npm install vue-router 在src下新建目录router,在目录下新建index.js 在index.js里面配置路由 import { createR ...

  5. bouncycastle(BC) 实现SM2国密加解密、签名、验签

    https://www.cnblogs.com/dashou/p/14656458.html SM2国密加解密一个类就够了 <dependency> <groupId>org. ...

  6. URL中文转换成类似%E6%96%97%E7%A0%B4(url编码)格式

    要将汉字转换成编码格式拼接成请求,没怎么搞过,一番查找,最终确定使用C# 里的WebUtility using System.Net; var a = WebUtility.UrlEncode(&qu ...

  7. 开源即时通讯IM框架MobileIMSDK的微信小程序端技术概览

    一.基本介绍 MobileIMSDK - 微信小程序端是一套基于微信原生 WebSocket 的即时通讯库: 1)超轻量级.无任何第 3 方库依赖(开箱即用): 2)纯 JS 编写.ES6 语法.高度 ...

  8. 百度高效研发实战训练营-Step2

    百度高效研发实战训练营Step2 2.1 代码的艺术 2.1.1<代码的艺术>目的解读 这门课程的目的主要有以下四点: (1) 了解公司与学校写代码的不同 (2) 消除对于程序员这个职业的 ...

  9. (九).NET6.0搭建基于Redis的Hangfire定时器

    1.首先创建新的类库项目 Wsk.Core.Hangfire,然后在Wsk.Core.Package包项目下引用hangfire有关的组件,包括 Hangfire.Hangfire.Core.Hang ...

  10. 【开源】C#上位机必备高效数据转换助手

    一.前言 大家好!我是付工. 我们在进行上位机开发时,从设备端获取到的数据之后,需要进行一定的数据处理及转换,才能生成我们需要用的数据. 这其中就涉及到了各种数据类型之间的相关转换,很多非科班出身的电 ...