关于AES算法及JAVA中的实现
为什么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中的实现相关推荐
- AES加密算法在Java中的应用
1.加密算法 一两个月没写过博客了,上次把尚筹网的博客补了一波,然后就在找工作,这不,这个月刚入职,领导给了个代码优化的任务,使用SornarQube对项目代码进行分析,然后根据分析出来的点逐点优化. ...
- 线性回归算法在 java 中是如何实现的?
线性回归算法在 java 中是如何实现的? 1.使用矩阵运算库实现 可以使用 Java 中的矩阵运算库,例如 Apache Commons Math 库,实现线性回归算法.该库提供了多种矩阵运算和线性 ...
- javascript 解密_Javascript中的AES加密和Java中的解密
javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...
- Javascript中的AES加密和Java中的解密
AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...
- 聊聊传说中的散列哈希Hash算法,以及Java中的HashTable,HashMap,HashSet,ConcurrentHashMap......
建议本文结合java源码来阅读,看了之后就什么都懂了,还有参考文献. 散列(Hash) 是一种按关键字编址的存储和检索方法 散列表(HashTable)根据元素的关键字确定元素的位置 散列函数(Has ...
- 【算法】Java 中栈的使用
栈是一种重要的数据结构,满足后进先出,是面试中会重点考察的内容.下面通过例题来学习栈的使用. 1.力扣20.有效的括号[1] 给定一个只包括 '(',')','{','}','[',']' 的字符 ...
- 【算法】Java 中链表的基本操作
链表是一种重要的数据结构,在工程项目中广泛使用.对于链表,要搞清楚是否有头节点,即第一个节点不存任何数据,只是表示链表的头部,而首节点才是链表第一个真正存放数据的节点.通常情况下,对有头节点的链表 ...
- 对称加密——AES算法使用
对称加密 我们知道MD5加密的本质上是无法解密,是一个不可逆的过程,而网上有很多解密其实都是一种穷举法对比,根本不存在破解方法. 但是在业务中,很多时候存在解密的需要,这个时候我们可以采用对称加密,对 ...
- Java中的加密与安全,你了解多少
文章目录 数据安全 编码算法 摘要算法 MD5算法 SAH-1算法 BouncyCastle算法 Hmac算法 加密算法 对称加密算法 口令加密算法 密钥交换算法 非对称加密算法 数字签名算法 RSA ...
最新文章
- 飞天AI平台到底哪里与众不同?听听它的架构者怎么说
- from beautifulsoup4 import BeautifulSoup 报错
- jQuery的Ajax初识
- 一步一步学Remoting
- Salesforce 小知识:大量“子记录”的处理方法
- 安卓吸顶+下拉放大_Android自定义scrollView实现顶部图片下拉放大
- Java不确定参数个数的函数方法,实现求多个数最小值
- 两种常见挂载Jenkins slave节点的方法
- Active Diretory 全攻略(三)--建立域(5)
- 回望之六:太阳山与红寺堡
- Extjs4.0 NumberField的使用
- 8 | Spatial-based GNN/convolution模型之GAT(受欢迎)
- SQL SERVER导入EXCEL文件:无法创建链接服务器 (null) 的 OLE DB 访问接口 Microsoft.Ace.OLEDB.12.0 的实例。...
- 《Python核心编程》笔记 基础
- 站在搜索引擎的视角看ASO,aso商店搜索引擎优化
- AlphaGo Zero 强化学习算法原理深度分析
- warning: #61-D: integer operation result is out of range
- software_reporter_tool 进程关闭的优雅法子
- 阿里云Centos8 yum报错Failed to synchronize cache for repo ‘BaseOS‘解决方案,通过换文件的方式来解决。
- WordPress安装简单详细教程(云服务器和轻量应用服务器搭建WordPress)