通过有线方式传输诸如纯文本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进行加密并使用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);
}

以下是结果

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

推荐阅读--

每日一课 | 浅谈Python魔术方法和属性

每日一课 | 函数详解

每日一课 | Python综合案例实战

每日一课 | Python面向对象

每日一课 | Python-气泡图

球分享

球点赞

球在看

每日一课 | AES加密和解密(CBC模式)相关推荐

  1. Java中的AES加密和解密(CBC模式)

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

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

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

  3. python实现字母的加密和解密 字典_python实现AES加密与解密

    AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...

  4. openssl 加密解密 指令_openssl命令aes加密和解密

    openssl命令aes加密和解密 日期:2014-11-12 10:41:25 最后更新日期:2017-07-06 10:00:10 [技术] man openssl查看openssl的功能: [c ...

  5. Golang里的AES加密、解密

    AES加密和解密的三种模式实现(CBC/ECB/CFB) package mainimport ( "bytes" "crypto/aes" "cry ...

  6. Oracle的AES加密与解密用法

    Oracle的AES加密与解密用法 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/it ...

  7. aes加密算法python实现_Python基于pycrypto实现的AES加密和解密算法示例

    本文实例讲述了Python基于pycrypto实现的AES加密和解密算法.分享给大家供大家参考,具体如下: 一 代码 # -*- coding: UTF-8 -*- import string imp ...

  8. oracle实现aes解密_Oracle的AES加密与解密用法

    Oracle的AES加密与解密用法 2013年12月11日 11:50:35 iteye_751 阅读数:428 --加密字符串 create or replace function des3_enc ...

  9. Php AES加密、解密与Java互操作的问题

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

最新文章

  1. C语言 —— 关键字(C语言标准定义的32个关键字:auto、register、static、sizeof、signed、unsigned 、break 、 continue 、void)
  2. 高级Java必看的10本书
  3. axios发送请求(baseURL有多个的情况)
  4. arcgis运行慢_ArcGIS Pro运行较慢的诊断方法
  5. CMD窗口居中的方法(转)
  6. js鼠标拖动图片拼图完成验证
  7. tomcat编码配置gbk_tomcat的编码设置 tomcat中文问题的解决
  8. 量化选股模型—多因子模型
  9. 笔记-知识产权与标准化知识-中华人民共和国招标投标法实施条例
  10. 【BZOJ2286】【SDOI2011】消耗战 LCA单调性(构建虚树)+树形DP
  11. 2021下半年河南郑州普通话测试报名入口
  12. 如何避免浏览器缓存。
  13. 对我的数据分析工作帮助很大的“无用知识”
  14. 盘点5月份GitHub上最热门的开源项目
  15. 复利计算5.0 结对
  16. 计算机开机启动过程详解
  17. 计算机二级c内容,计算机二级C语言考试内容大纲
  18. 我的世界java骷髅马_我的世界中国版骷髅马怎么获得 骷髅马召唤驯服指令
  19. 维克森林大学计算机科学专业好不好,美国维克森林大学计算机科学硕士专业介绍...
  20. 在TCL网线接口的彩电上看pdf文档的电子书 845电脑的扫描电子电路图扫描仪图

热门文章

  1. 深扒金山云招股书:拆分出来的子公司,能否走出金山系“舒适圈”?
  2. QLabel setText 标红 加粗
  3. 六、mysql性能优化
  4. 【日常计算机问题】win11、win10解决公共WiFi认证不弹出的问题。电脑没有弹出认证界面。以广州图书馆i-guangdong;i广东为例
  5. c++直角空心三角形_八年级数学三角形专题知识点汇总,掌握了考满分!
  6. pip报错 Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-wa
  7. mysql中计算最大回撤_基金最大回撤算例(Java 1.8)
  8. VOLTE-QOS服务质量
  9. Excel 文件怎么批量插入首页、扉页、尾页?怎么将某个 Excel 文件批量插入到其它 Excel 文件的指定位置?
  10. 华三(H3C)单臂路由