java中常用的加密算法总结

news2024/9/20 1:10:08

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

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.coloradmin.cn/o/1326080.html

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

相关文章

活动回顾丨迁飞之路主题艺术墙绘落地大坪大融城

重庆作为鹰飞之城,不仅是数十万猛禽迁飞的必经之路,也是其他珍稀鸟类的家园。守护飞羽精灵,领略迁飞之美,2023年12月19日,传益千里携手重庆工商大学艺术学院党员服务站的志愿者们一起走进大坪大融城开展迁飞之路生态艺…

软件测试工程师,“我“从月10k到月30k进阶自动化测试之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 作为手工测试&…

Likeshop单商户高级版商城的二次开发之路

一、产品介绍 likeshop单商户高级版是一款适用于B2C、单商户、自营商城场景的商城系统。它完美契合私域流量变现闭环交易使用,拥有丰富的营销玩法、强大的分销能力,支持DIY多模板,前后端分离。无论您是想要进行商城运营还是二次开发&#xf…

聚观早报 |xPad2 Pro系列学习机发布;华为Mate X5典藏版实力过硬

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 12月21日消息 xPad2 Pro系列学习机发布 华为Mate X5典藏版实力过硬 iQOO Neo9系列标配芯片Q1 亚马逊云科技自研芯…

CentOS 宣布停更3年后,服务器操作系统何去何从?

“CentOS 要停止更新了?” 盯着电脑,某大型企业数字化部门的负责人彭素素看到这个消息,不仅在心里发出了一声惊呼。 2020年,CentOS 停止更新的消息,不仅彭素素所在的企业,对于不少正在使用 CentOS 的厂商…

搞懂这6 个持续集成工具,领先80%测试人!

开发人员喜欢把写的代码当成自己的孩子,他们会被当成艺术品一样呵护。作为家长,总是会认为自己的孩子是最好的,也会尽全力给自己的孩子最好的,就算有时候会超出自己的能力范围。 最终,孩子会走出去,和其他…

【笔试强化】Day 6

文章目录 一、单选1.2.3.4.5.6.7. 二、不定项选择1.2.3. 三、编程1. 把字符串转换成整数解法:代码: 2. 不要二解法:代码: 一、单选 1. 正确答案:D2. 正确答案:B3. 正确答案:D4. 正确答案&#…

Python编程技巧 – 使用正则表达式

Python编程技巧 – 使用正则表达式 Python Programming Skills – Using Regular Expression By JacksonML Python以其强大的功能高居全球编程软件的榜首。它易于学习和使用,使其成为初学者绝佳语言。此外,Python还用于各种应用程序,包括We…

Java Swing学生成绩管理系统期末大作业

1.且看界面 (1)登录页(可记住账号密码) (2)注册弹窗页 (3)登录弹窗 (4)还有账号密码错误3次需等待30秒 (5)成绩展示页面(…

【Spring】15 ApplicationContextAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架提供了许多回调接口,用于在 Bean 的生命周期中执行特定的操作。ApplicationContextAware 接口是其中之一,它允许 Bean 获取对 A…

无代码API集成助力电商平台,提升味分享营销系统效率

无代码开发的革命 在数字化转型的浪潮中,无代码开发正在成为企业提升效率和灵活性的重要工具。特别是在电商领域,高效的客户关系管理(CRM)系统和客户服务系统对于保持竞争力至关重要。无代码API集成方案如何实现电商系统的优化和…

存在重复元素

题目链接 存在重复元素 题目描述 注意点 无 解答思路 根据Set无法存储相同元素的特点判断nums中是否存在重复元素 代码 class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set new HashSet<Integer>();for (int x : nums) {if …

广州华锐互动:VR元宇宙技术为汽车行业带来革命性变化

随着科技的飞速发展&#xff0c;VR元宇宙技术已经深入影响到我们生活的方方面面&#xff0c;汽车行业更是深受其益。这一新兴技术的出现&#xff0c;为汽车行业带来了前所未有的变化。广州华锐互动将VR技术应用于汽车行业&#xff0c;研发了VR汽修培训、3D汽车展厅、特种车辆3D…

JVM内存结构Java内存模型Java对象模型

导图&#xff1a; https://naotu.baidu.com/file/60a0bdcaca7c6b92fcc5f796fe6f6bc9 1.JVM内存结构&&Java内存模型&&Java对象模型 1.1.JVM内存结构 1.2.Java对象模型 Java对象模型表示的是这个对象本身的存储模型,JVM会给这个类创建一个instanceKlass保存在方…

【powershell】Windows环境powershell 运维之历史文件压缩清理

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

什么是文件包含漏洞?文件包含漏洞利用方法及防御技巧

文章目录 文件包含漏洞文件包含漏洞利用方法如何预防文件包含漏洞文件包含漏洞防御技巧网安学习路线 文件包含漏洞 文件包含漏洞是指在程序执行过程中&#xff0c;将外部文件的内容作为程序代码或数据的一部分来执行或使用&#xff0c;从而导致程序行为异常。攻击者可以利用文…

ansible的脚本---playbook剧本

ansible的脚本---playbook剧本 playbook组成部分 1、tasks任务&#xff1a;包含要在目标主机上执行的操作&#xff0c;使用模块定义这些操作&#xff0c;每个任务都是一个模块的调用 2、varlables变量&#xff1a;存储和传递数据&#xff0c;变量可以自定义&#xff0c;可以…

企业 NAS 升级,如何解决 Windows ACL 权限迁移和配置?

数字化转型是当前时代的必然趋势&#xff0c;它对于企业的创新能力和竞争力的提升至关重要。企业数字化发展过程中会产生大量的非结构化数据&#xff0c;旧有的存储已经不能完全满足企业需求。因此&#xff0c;相应的存储基础设施需要升级换代&#xff0c;以适应新的业务发展。…

本地生活团购外卖怎么做?一招教你轻易入行!

如果说今年生意不好做的话&#xff0c;那么年初做本地生活服务这个赛道的现在是喜忧参半。喜的是在本地生活干团购和外卖把钱给挣上了。忧的是官方清退了所有的全国本地生活服务商。通过官方渠道基本是没的玩了。本来还想着干个三五年。实现车子、房子、票子自由。这计划全落空…

【漏洞复现】Dedecms信息泄露漏洞(CVE-2018-6910)

Nx01 产品简介 DesdevDedeCMS&#xff08;织梦内容管理系统&#xff09;是中国卓卓网络&#xff08;Desdev&#xff09;科技有限公司的一套开源的集内容发布、编辑、管理检索等于一体的PHP网站内容管理系统&#xff08;CMS&#xff09;。 Nx02 漏洞描述 DesdevDedeCMS5.7版本中…