常用对称加密算法之AES算法-CBC模式
这个需求很简单就是存储数据库密码,因为链接数据库的需要用到,加密就必须要用对称加密算法,于是简单调研了一下对称加密算法,经过对比最后选择了AES算法-CBC模式
怎么理解对称加密
加密:接收秘钥key和明文,然后输出密文。
解密:通过key解密密文,得到明文
例: 加密 123 =》AES( 123 + key ) =》@#$ 解密 @#$ =》AES( key + @#$ ) =》123
对比
这里简单对我了解过的对称加密算法做个比较
算法 | 密钥长度 | 运算速度 | 安全性 | 资源消耗 |
---|---|---|---|---|
DES | 56/64 | 较快 | 低(完全依赖密钥,易受穷举搜索法攻击) | 中 |
AES | 128/192/256 | 快 | 高(ECB模式生成固定密钥安全性低,CBC模式每次生成的密文都不同安全性高) | 低 |
IDEA | 128 | 较慢 | 高(军事级,可抗差值分析和相关分析) | 中 |
1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
2、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128位密钥提供非常强的安全性;
3、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael算法;
密钥长度直接决定加密强度,DES算法由于密钥过短,可以在短时间内被暴力破解,所以现在已经不安全了。
算法选择
既然要使用对称加密算法,那么就必须要考虑两点,安全性和性能,那么针对上面三种算法,显而易见的AES的CBC模式是不二之选
代码demo实现
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;public class SecretUtil {//这里需要设置你的32位字节密钥public static final String ENCRYPT_OR_DECRYPT_KEY = "1234567890abcdef1234567890abcdef";// 256位密钥 = 32 bytes Key://CBC模式是安全性较高的AES加密模式,它需要一个随机数作为IV参数,这样对于同一份明文,每次生成的密文都不同public static final byte[] BYTES_KEY = ENCRYPT_OR_DECRYPT_KEY.getBytes(StandardCharsets.UTF_8);public static final String INSTANCE = "AES/CBC/PKCS5Padding";public static final String AES = "AES";public static void main(String[] args) throws Exception {String password = "你来打我呀!";String encryptStr1 = encrypt(password);System.out.println("第一次加密:" + encryptStr1);String decryptStr1 = decrypt(encryptStr1);System.out.println("第一次解密:" + decryptStr1);String encryptStr2 = encrypt(password);System.out.println("我每次加密都不一样:" + encryptStr2);String decryptStr2 = decrypt(encryptStr1);System.out.println("但我每次都能得到你:" + decryptStr2);}// 加密public static String encrypt(String password) throws Exception {Cipher cipher = Cipher.getInstance(INSTANCE);SecretKeySpec keySpec = new SecretKeySpec(BYTES_KEY, AES);// CBC模式需要生成一个16 bytes的initialization vectorSecureRandom sr = SecureRandom.getInstanceStrong();byte[] iv = sr.generateSeed(16);IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);byte[] data = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));// IV不需要保密,把IV和密文一起返回return DatatypeConverter.printBase64Binary(join(iv, data));}// 解密public static String decrypt(String password) throws Exception {byte[] iv = new byte[16];byte[] input = DatatypeConverter.parseBase64Binary(password);byte[] data = new byte[input.length - 16];// 把password分割成IV和密文System.arraycopy(input, 0, iv, 0, 16);System.arraycopy(input, 16, data, 0, data.length);// 解密Cipher cipher = Cipher.getInstance(INSTANCE);SecretKeySpec keySpec = new SecretKeySpec(BYTES_KEY, AES);IvParameterSpec ivps = new IvParameterSpec(iv);cipher.init(Cipher.DECRYPT_MODE, keySpec, ivps);return new String(cipher.doFinal(data), StandardCharsets.UTF_8);}public static byte[] join(byte[] bs1, byte[] bs2) {byte[] r = new byte[bs1.length + bs2.length];System.arraycopy(bs1, 0, r, 0, bs1.length);System.arraycopy(bs2, 0, r, bs1.length, bs2.length);return r;}
}
输出验证:
好了,对称加密算法之AES算法-CBC模式的简单应用就介绍到这里
参考文章:廖雪峰的官方网站-对称加密算法
常用对称加密算法之AES算法-CBC模式相关推荐
- aes算法cbc模式c语言,AES算法及它的CBC加密模式
AES四種加密模式的區別: ECB(Electronic Code Book電子密碼本)模式 ECB模式是最早采用和最簡單的模式,它將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然后每組都用相 ...
- LINUX、C#下使用DES算法CBC模式进行对称加密、解密
openssl是一个加密库,封装了多个算法,我们这里使用的是DES算法CBC模式. 一.准备OPENSSL的LINUX及C#库 openssl项目地址: https://www.openssl.org ...
- 常用对称加密算法(DES/AES)类(PHP)
看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自动匹配使用: ...
- JAVA加密解密→术语、密码分类、OSI与TCP/IP安全体系、Base64、消息摘要算法MD/SHA/MAC、对称加密算法DES/AES/PBE、非对称加密算法DH/RSA/EIGamaI
术语 密码分类 OSI与TCP/IP安全体系 JAVA安全 Base64算法 消息摘要算法MD 消息摘要算法MD图解 消息摘要算法SHA 消息摘要算法SHA图解 消息摘要算法MAC 消息摘要算法MAC ...
- python aes加密 cbc_Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda...
1.chr()函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 2.s[a:b:c] s=(1,2,3,4,5) 1>. s[a]下标访 ...
- 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。
对称加密算法:DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES. 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文 ...
- Hmac算法与对称加密算法
HmacMD5算法是一种基于密钥的消息认证算法,是一种更安全的算法 它的好处: 使用的key长度是64字节,更安全 Hmac是标准算法,同样适用于SHA-1等其他哈希算法 Hmac输出和原有的哈希算法 ...
- 对称加密算法原理与常用实现
目录 定义 常用对称加密算法 DES 3DES AES PEB 常用对称加密算法的java实现 DES实现 3DES实现 AES实现 PEB实现 定义 原文通过加密秘钥生成密文,密文通过解密秘钥得到原 ...
- 对称加密——AES算法使用
对称加密 我们知道MD5加密的本质上是无法解密,是一个不可逆的过程,而网上有很多解密其实都是一种穷举法对比,根本不存在破解方法. 但是在业务中,很多时候存在解密的需要,这个时候我们可以采用对称加密,对 ...
最新文章
- 使用visual studio code调试php代码
- 7分钟分析人类全基因组,他们刷新全球纪录,此前最快也要24小时
- Oracle入门心得(2)
- 内核中的UDP socket流程(7)——udp_sendmsg
- 解放原画师!Wav2Lip 用 AI 听音同步人物口型
- mybatis 主键自增 insert后返回主键
- 基于 Redis3.2.4 集群搭建说明
- 关于从Activity A跳转到Activity B ,其中Activity A中有一个VideoView,Activity B中有一个MediaPlayer。...
- mysql binlog 过期_mysql清理过期binlog堵塞数据库
- python中type(12.34)_下面代码的输出结果是
- python面经总结之常见的问题与基本模块的常见使用方法
- HanLP-地名识别调试方法
- QT5安装自己下载的mingw32及一些常见报错解决
- 重新理解泰勒公式 牛顿法
- 参考文献起止页码怎么写_参考文献规范写法
- Markdown书写软件Typora的使用--图片上传(PicGo与Github/Gitee)及排版
- 类别名称转换为一一对应的数字标签
- 最小公倍数用c语言,如何用C语言求最小公倍数。。。
- Vue:运行项目时报错:Module not found: Error: Can't resolve 'sass-loader' in
- 【常用数据结构——并查集(又在乱牵线了)】
热门文章
- 计算机管理自主工作报告总结,多媒体管理员个人工作总结
- 边缘智能:边缘计算与人工智能融合的新范式
- 关于system(”pause“);的作用和意义
- 牙齿修复的类型有哪些?
- 一分钟区分splice,slice,split
- Learn Git Branching 学习笔记(移动提交记录篇)
- PS技巧 如何在磨皮过程中保留更多细节
- 迷你世界电路计算机的过程,迷你世界电路定时器教程 电路定时器怎么做
- 很有趣的MM,你叫她做什么她就做什么,希望不是火星。
- 打砖块c语言编程,打砖块小游戏 C语言编写.txt.txt