通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法。在本文中,我们将讨论Java中具有CBC模式的AES(高级加密标准)对称加密算法,比3DES更快,更安全。

加密方式

众所周知,加密有2种基本类型-非对称和对称加密。 非对称加密使用两个不同的密钥作为公共密钥和私有密钥,您可以在此处使用公共密钥对敏感信息进行加密,并使用匹配的私有密钥对相同信息进行解密。当涉及到两个不同的端点时,通常使用非对称加密,例如VPN客户端和服务器,SSH等

同样,我们还有另一种称为对称加密的加密技术。这种类型的加密使用称为私钥或秘密密钥的单个密钥对敏感信息进行加密和解密,与非对称加密相比,这种类型的加密速度非常快。对称加密的一些示例有Twofish,Blowfish,3 DES和AES。

什么是AES加密

AES代表高级加密系统及其对称加密算法,它是由美国国家标准技术研究院(NIST)于2001年建立的电子数据加密规范,此处是AES的Wiki链接 。需要使用纯文本和密钥进行加密,并且需要相同的密钥才能再次对其进行解密。

要查看AES加密的实际工作原理,可以检查一下– AES加密工具

输入可以是128位或192位或256位,并生成相应的密文位。

Java中的AES加密

以下是Java中执行AES加密的示例程序。在这里,我们使用具有CBC模式的AES来加密消息,因为ECB模式在语义上并不安全.IV模式也应随机分配给CBC模式。

如果使用相同的密钥来加密所有纯文本,并且如果攻击者找到了该密钥,则可以以类似的方式解密所有密码。我们可以使用salt和迭代来进一步改进加密过程。在以下示例中,我们将使用128位加密密钥。这是在线AES加密工具 。

private static final String key = "aesEncryptionKey";
private static final String initVector = "encryptionIntVec";public static String encrypt(String value) {try {IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] encrypted = cipher.doFinal(value.getBytes());return Base64.encodeBase64String(encrypted);} catch (Exception ex) {ex.printStackTrace();}return null;
}
Other Interesting Posts
Spring Boot Security Password Encoding using Bcrypt Encoder
Spring Boot Security JWT Auth Example
Spring Boot Security OAuth2 Example
Spring Boot Security REST Basic Authentication
Spring Boot Actuator Complete Guide
Spring Boot Actuator  Rest Endpoints Example
Spring 5 Features and Enhancements
Spring Boot Thymeleaf Example
Spring Boot Security Hibernate Example with complete JavaConfig
Securing REST API with Spring Boot Security Basic Authentication
Websocket spring Boot Integration Without STOMP with complete JavaConfig

Java中的AES解密

以下是解密密码的相反过程。代码具有自我解释性。

public static String decrypt(String encrypted) {try {IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));return new String(original);} catch (Exception ex) {ex.printStackTrace();}return null;
}

测试AES加密和解密

以下是main()实现,以测试我们的AES实现。

public static void main(String[] args) {String originalString = "password";System.out.println("Original String to encrypt - " + originalString);String encryptedString = encrypt(originalString);System.out.println("Encrypted String - " + encryptedString);String decryptedString = decrypt(encryptedString);System.out.println("After decryption - " + decryptedString);
}

以下是结果。

结论

希望本文能为您提供所需的服务。 如果您有任何要添加或共享的内容,请在下面的评论部分中共享。在下一篇文章中,我们将讨论javascript和Java之间的AES互操作性。

翻译自: https://www.javacodegeeks.com/2018/03/aes-encryption-and-decryption-in-javacbc-mode.html

Java中的AES加密和解密(CBC模式)相关推荐

  1. 探讨.NET Core中实现AES加密和解密以及.NET Core为我们提供了什么方便!

    前言 对于数据加密和解密每次我都是从网上拷贝一份,无需有太多了解,由于在.net core中对加密和解密目前全部是统一了接口,只是做具体的实现,由于遇到过问题,所以将打算基本了解下其原理,知其然足矣, ...

  2. java中md5加密和解密_如何在java中实现md5加密和解密

    如何在java中实现md5加密和解密 关注:273  答案:1  mip版 解决时间 2021-01-19 20:37 提问者精神疯裂 2021-01-19 05:36 如何在java中实现md5加密 ...

  3. Java中常用的加密与解密

    一.对称加密与非对称加密 1.对称加密 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困 ...

  4. JS前端加密和Java后端的AES加密和解密

    先上前端代码 import cryptoJs from 'crypto-js' let keyOne = 'ZHyXgjF7BejeJySh5vX4O6qE'export default {//加密e ...

  5. Java中对图片进行简单加密和解密

    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...

  6. javascript 解密_Javascript中的AES加密和Java中的解密

    javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...

  7. Javascript中的AES加密和Java中的解密

    AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...

  8. 每日一课 | AES加密和解密(CBC模式)

    通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用SSL传输这些机密数据.Java为此提供了多种加密算法.在本文中,我们将讨论Java中具有CBC模 ...

  9. Android+Java中使用Aes对称加密的工具类与使用

    场景 Android+Java中使用RSA加密实现接口调用时的校验功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11146 ...

最新文章

  1. 【POJ1144】Network
  2. 学习篇之软件测试——初
  3. 【鸿蒙 HarmonyOS】UI 组件 ( 单选按钮 | RadioButton 与 RadioContainer 组件 )
  4. python3软件怎么用_Python3学习之路~4.4 软件目录结构规范
  5. python如何运行一个python程序_在python中,如何运行一个命令行程序,它在发送Ctrl+D之前不会返回...
  6. js处理倒计时,日期可以是当前日期也可以传1个时间点
  7. 对已经关闭的的chan进行读写,会怎么样?为什么?
  8. 基于八叉树的区域增长点云分割算法
  9. checksum建立的索引
  10. c语言银行排队系统链表,银行预约排队系统(数据结构问题)
  11. Excel2010中打开Smartview时报不能设置类Addin的installed属性
  12. 广告终结者自定义过滤搜集
  13. 5份简洁大方的个人简历模板,让你轻松应对面试
  14. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数
  15. 假如有人把支付宝存储服务器炸了,我们的钱还在吗?
  16. 阿里云 1H2G T5实例 与 腾讯云 1H2G 标准2实例 测试对比
  17. ionic3学习之Events
  18. 如何学习深度学习——我的高质量学习资源列表
  19. 天宇优配|离岸人民币狂拉逾千点!中概股暴涨!B站涨22%
  20. 基于 WebSocket 的实时通告功能,推送在线与未登录用户

热门文章

  1. 分布式之redis复习精讲
  2. Oracle入门(十二G)之序列
  3. Java多线程神器:join使用及原理
  4. JavaScript常用单词整理总结
  5. sqlserver建库建表建约束,删库删表删约束的示例总结
  6. 某同学正为自己安装不上sqlserver数据库而愁眉苦脸,使用朋友给的方法顿时喜笑颜开,那么朋友到底出了个什么样的方法呢?...
  7. 循环输入某同学 S1 结业考试的 5 门课成绩,并计算平均分
  8. Photoshop的绘图工具
  9. mybatis简单案例源码详细【注释全面】——实体层(User.java)
  10. SparkSQL性能优化