这个需求很简单就是存储数据库密码,因为链接数据库的需要用到,加密就必须要用对称加密算法,于是简单调研了一下对称加密算法,经过对比最后选择了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模式相关推荐

  1. aes算法cbc模式c语言,AES算法及它的CBC加密模式

    AES四種加密模式的區別: ECB(Electronic Code Book電子密碼本)模式 ECB模式是最早采用和最簡單的模式,它將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然后每組都用相 ...

  2. LINUX、C#下使用DES算法CBC模式进行对称加密、解密

    openssl是一个加密库,封装了多个算法,我们这里使用的是DES算法CBC模式. 一.准备OPENSSL的LINUX及C#库 openssl项目地址: https://www.openssl.org ...

  3. 常用对称加密算法(DES/AES)类(PHP)

    看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自动匹配使用: ...

  4. 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 ...

  5. 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]下标访 ...

  6. 对称加密算法DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES。

    对称加密算法:DES,3重DES,TDEA,Blowfish,RC5,IDEA,AES. 1.对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟.在对称加密算法中,数据发信方将明文 ...

  7. Hmac算法与对称加密算法

    HmacMD5算法是一种基于密钥的消息认证算法,是一种更安全的算法 它的好处: 使用的key长度是64字节,更安全 Hmac是标准算法,同样适用于SHA-1等其他哈希算法 Hmac输出和原有的哈希算法 ...

  8. 对称加密算法原理与常用实现

    目录 定义 常用对称加密算法 DES 3DES AES PEB 常用对称加密算法的java实现 DES实现 3DES实现 AES实现 PEB实现 定义 原文通过加密秘钥生成密文,密文通过解密秘钥得到原 ...

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

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

最新文章

  1. 使用visual studio code调试php代码
  2. 7分钟分析人类全基因组,他们刷新全球纪录,此前最快也要24小时
  3. Oracle入门心得(2)
  4. 内核中的UDP socket流程(7)——udp_sendmsg
  5. 解放原画师!Wav2Lip 用 AI 听音同步人物口型
  6. mybatis 主键自增 insert后返回主键
  7. 基于 Redis3.2.4 集群搭建说明
  8. 关于从Activity A跳转到Activity B ,其中Activity A中有一个VideoView,Activity B中有一个MediaPlayer。...
  9. mysql binlog 过期_mysql清理过期binlog堵塞数据库
  10. python中type(12.34)_下面代码的输出结果是
  11. python面经总结之常见的问题与基本模块的常见使用方法
  12. HanLP-地名识别调试方法
  13. QT5安装自己下载的mingw32及一些常见报错解决
  14. 重新理解泰勒公式 牛顿法
  15. 参考文献起止页码怎么写_参考文献规范写法
  16. Markdown书写软件Typora的使用--图片上传(PicGo与Github/Gitee)及排版
  17. 类别名称转换为一一对应的数字标签
  18. 最小公倍数用c语言,如何用C语言求最小公倍数。。。
  19. Vue:运行项目时报错:Module not found: Error: Can't resolve 'sass-loader' in
  20. 【常用数据结构——并查集(又在乱牵线了)】

热门文章

  1. 计算机管理自主工作报告总结,多媒体管理员个人工作总结
  2. 边缘智能:边缘计算与人工智能融合的新范式
  3. 关于system(”pause“);的作用和意义
  4. 牙齿修复的类型有哪些?
  5. 一分钟区分splice,slice,split
  6. Learn Git Branching 学习笔记(移动提交记录篇)
  7. PS技巧 如何在磨皮过程中保留更多细节
  8. 迷你世界电路计算机的过程,迷你世界电路定时器教程 电路定时器怎么做
  9. 很有趣的MM,你叫她做什么她就做什么,希望不是火星。
  10. 打砖块c语言编程,打砖块小游戏 C语言编写.txt.txt