为什么80%的码农都做不了架构师?>>>   

什么是AES

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。

基本原理

AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。

java中的AES

五种模式

  • ECB(电子密码本 (Electronic Code Book))
  • CBC(密码块链接 (Cipher Block Chaining))
  • CFB(密码反馈方式 (Cipher Feedback Mode))
  • OFB(输出反馈方式 (Output Feedback Mode))
  • PCBC(填充密码块链接 (Propagating Cipher Block Chaining))
  • JCE中AES支持上述五种模式:CBC,CFB,ECB,OFB,PCBC
  • 不支持“NONE”模式
  • 不同模式的优缺点见 这里
  • 深入到原理级的介绍见 这里

三种填充

  • 支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding
  • 不支持SSL3Padding

默认的模式和填充

不带模式和填充来获取AES算法的时候,其默认使用__ECB/PKCS5Padding__

关于加密前后的长度

    算法/模式/填充                   16字节加密后数据长度         不满16字节加密后长度AES/CBC/NoPadding              16                         不支持AES/CBC/PKCS5Padding           32                         16AES/CBC/ISO10126Padding        32                         16AES/CFB/NoPadding              16                         原始数据长度AES/CFB/PKCS5Padding           32                         16AES/CFB/ISO10126Padding        32                         16AES/ECB/NoPadding              16                         不支持AES/ECB/PKCS5Padding           32                         16AES/ECB/ISO10126Padding        32                         16AES/OFB/NoPadding              16                         原始数据长度AES/OFB/PKCS5Padding           32                         16AES/OFB/ISO10126Padding        32                         16AES/PCBC/NoPadding             16                         不支持AES/PCBC/PKCS5Padding          32                         16AES/PCBC/ISO10126Padding       32                         16

可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16n,则使用NoPadding时加密后数据长度等于16n,其它情况下加密数据长度等于16*(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16n+m[其中m小于16],除了NoPadding填充之外的任何方式,加密数据长度都等于16(n+1);NoPadding填充情况下,CBC、ECB和PCBC三种模式是不支持的,CFB、OFB两种模式下则加密数据长度等于原始数据长度。

摘自 这里

示例代码

    SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES");//cipher.init(Cipher.DECRYPT_MODE, skeySpec);    //解密模式cipher.init(Cipher.ENCRYPT_MODE, skeySpec);    //加密模式cipher.doFinal(src);

详细请见 这里

转载于:https://my.oschina.net/bbdlg/blog/310311

关于AES算法及JAVA中的实现相关推荐

  1. AES加密算法在Java中的应用

    1.加密算法 一两个月没写过博客了,上次把尚筹网的博客补了一波,然后就在找工作,这不,这个月刚入职,领导给了个代码优化的任务,使用SornarQube对项目代码进行分析,然后根据分析出来的点逐点优化. ...

  2. 线性回归算法在 java 中是如何实现的?

    线性回归算法在 java 中是如何实现的? 1.使用矩阵运算库实现 可以使用 Java 中的矩阵运算库,例如 Apache Commons Math 库,实现线性回归算法.该库提供了多种矩阵运算和线性 ...

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

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

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

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

  5. 聊聊传说中的散列哈希Hash算法,以及Java中的HashTable,HashMap,HashSet,ConcurrentHashMap......

    建议本文结合java源码来阅读,看了之后就什么都懂了,还有参考文献. 散列(Hash) 是一种按关键字编址的存储和检索方法 散列表(HashTable)根据元素的关键字确定元素的位置 散列函数(Has ...

  6. 【算法】Java 中栈的使用

      栈是一种重要的数据结构,满足后进先出,是面试中会重点考察的内容.下面通过例题来学习栈的使用. 1.力扣20.有效的括号[1] 给定一个只包括 '(',')','{','}','[',']' 的字符 ...

  7. 【算法】Java 中链表的基本操作

      链表是一种重要的数据结构,在工程项目中广泛使用.对于链表,要搞清楚是否有头节点,即第一个节点不存任何数据,只是表示链表的头部,而首节点才是链表第一个真正存放数据的节点.通常情况下,对有头节点的链表 ...

  8. 对称加密——AES算法使用

    对称加密 我们知道MD5加密的本质上是无法解密,是一个不可逆的过程,而网上有很多解密其实都是一种穷举法对比,根本不存在破解方法. 但是在业务中,很多时候存在解密的需要,这个时候我们可以采用对称加密,对 ...

  9. Java中的加密与安全,你了解多少

    文章目录 数据安全 编码算法 摘要算法 MD5算法 SAH-1算法 BouncyCastle算法 Hmac算法 加密算法 对称加密算法 口令加密算法 密钥交换算法 非对称加密算法 数字签名算法 RSA ...

最新文章

  1. 飞天AI平台到底哪里与众不同?听听它的架构者怎么说
  2. from beautifulsoup4 import BeautifulSoup 报错
  3. jQuery的Ajax初识
  4. 一步一步学Remoting
  5. Salesforce 小知识:大量“子记录”的处理方法
  6. 安卓吸顶+下拉放大_Android自定义scrollView实现顶部图片下拉放大
  7. Java不确定参数个数的函数方法,实现求多个数最小值
  8. 两种常见挂载Jenkins slave节点的方法
  9. Active Diretory 全攻略(三)--建立域(5)
  10. 回望之六:太阳山与红寺堡
  11. Extjs4.0 NumberField的使用
  12. 8 | Spatial-based GNN/convolution模型之GAT(受欢迎)
  13. SQL SERVER导入EXCEL文件:无法创建链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Ace.OLEDB.12.0 的实例。...
  14. 《Python核心编程》笔记 基础
  15. 站在搜索引擎的视角看ASO,aso商店搜索引擎优化
  16. AlphaGo Zero 强化学习算法原理深度分析
  17. warning: #61-D: integer operation result is out of range
  18. software_reporter_tool 进程关闭的优雅法子
  19. 阿里云Centos8 yum报错Failed to synchronize cache for repo ‘BaseOS‘解决方案,通过换文件的方式来解决。
  20. WordPress安装简单详细教程(云服务器和轻量应用服务器搭建WordPress)

热门文章

  1. css 不展示滚动条,CSS-界面滚动时不显示滚动条
  2. 【NIO】IO多路复用
  3. 浅析Mysql Join语法以及性能优化
  4. 30 分钟 git 命令入门
  5. java jgit提交代码_java – 使用JGit提交一个String
  6. python杀死线程的方法_python杀死一个线程的方法
  7. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
  8. mysql多索引结构_MySQL 索引结构
  9. Kubernetes文章汇总
  10. vantui框架_vue移动端优秀框架收集