美文网首页
对称加密算法之四

对称加密算法之四

作者: 喏喏2021 | 来源:发表于2021-12-09 14:04 被阅读0次

1. 相关概念

  • 加密和解密的密钥是一样的
  • 加解密速度较快,可以在数据较大时使用
  • 一定要保证密钥的安全
  • 加密过程:密文 = 运算过程(原文,密钥,工作模式,填充模式)
  • 加密参数:密钥、工作模式、填充模式
    1. 不同算法的密钥长度不一样,长度越长,安全性越高
    2. 工作模式,也就是加密运算的过程,比如有ECB(电子密码本模式)、CBC(密码分组链接)、CFB(密文反馈模式)、OFB(输出反馈模式)等
    3. 填充模式,运算过程中出现位数不足时,如何进行补全

2. 常见算法

  • DES 因为密钥较短,极易被破解,一般极少使用
  • 3DES 基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高
  • AES 高级加密标准,是下一代加密算法标准,速度快,安全极别高,推荐使用

3. 代码示例

上面提到,工作模式不同,运算的过程也是不一样的,当然代码实现也是不一样的,下面分别介绍

  1. ECB模式
import java.security.SecureRandom;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

String content = "abc"; //原文
String encryptKey = "1234567890ABCDEF";  //16字节,128位密钥

//加密
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); //设置算法、工作模式、填充模式
SecretKey key = new SecretKeySpec(encryptKey.getBytes(),"AES");
cipher.init(Cipher.ENCRYPT_MODE, key); //加密模式
byte[] encryptBytes = cipher.doFinal(content.getBytes("UTF-8")); //得到加密的信息
System.out.println("encrypt data:" + Base64.getEncoder().encodeToString(encryptBytes));
//WRsSrNWboZEAWOh27H9ziw==

//解密
Cipher cipher1 = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKey key1 = new SecretKeySpec(encryptKey.getBytes(),"AES");
cipher1.init(Cipher.DECRYPT_MODE, key1); //解密信息
byte[] decryptBytes1 = cipher1.doFinal(encryptBytes); //得到原文
System.out.println("decrypt data:" + new String(decryptBytes1,"UTF-8"));
//abc
  1. CBC模式
import java.security.SecureRandom;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

String content = "abc";
String encryptKey = "1234567890ABCDEF"; 

//加密
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKey key = new SecretKeySpec(encryptKey.getBytes(),"AES");
//生成16字节的iv参数,提高安全性
SecureRandom sr = SecureRandom.getInstanceStrong();
byte[] iv = sr.generateSeed(16);
IvParameterSpec ivps = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, key, ivps);
byte[] encryptBytes = cipher.doFinal(content.getBytes("UTF-8"));
System.out.println("encrypt data:" + Base64.getEncoder().encodeToString(encryptBytes));
//2+3Ju+DF4gwd1bDqs3UrhQ==
//注:因为有随机码的存在,所以每次生成的结果也不是相同的,较安全

//解密
Cipher cipher1 = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKey key1 = new SecretKeySpec(encryptKey.getBytes(),"AES");
cipher1.init(Cipher.DECRYPT_MODE, key1,ivps);
byte[] decryptBytes1 = cipher1.doFinal(encryptBytes);
System.out.println("decrypt data:" + new String(decryptBytes1,"UTF-8"));
//abc

上面iv参数因为是随机产生的,本身不需要保密,可以跟着密文一起返回,解密时可以提取出来备用

相关文章

  • Java 加密算法

    一、消息摘要算法 二、Base64 对称加密算法 三、Des 对称加密算法 四、Aes 对称加密算法 五、Pbe ...

  • 加密算法的应用

    加密算法的应用 [TOC] 加密算法 加密算法主要分为对称加密和非对称加密。 对称加密 对称加密采用了对称密码编码...

  • 常用加密算法

    1 常用加密算法 常用加密算法有 对称加密算法、非对称加密算法、Hash算法 对称加密算法 加密和解密使用相同的秘...

  • 对称加密算法之四

    1. 相关概念 加密和解密的密钥是一样的 加解密速度较快,可以在数据较大时使用 一定要保证密钥的安全 加密过程:密...

  • linux c/c++面试知识点整理(六)

    51、对称加密算法和非对称加密算法 对称加密算法 对称加密才用了对称密码编码技术,它的特点是文件加密和解密使用...

  • Android 加密算法AES/RSA

    Android中的MD5和RSA加密Android应用安全开发之浅谈加密算法的坑 对称加密 在对称加密算法中,数据...

  • Android 拿到私钥字符串对目标字符串进行加密

    关于加密算法 分为对称和非对称加密算法,其中RSA是常用非对称加密算法。对称加密中AES高级加密标准使用Rijnd...

  • 对称加密算法原理--OpenSSL演示、iOS代码运用及CCCr

    之前介绍了非对称加密算法,这篇文章介绍一下在非对称加密算法出现之前的对称加密算法,常见的对称加密算法、终端演示Op...

  • iOS 常用加密与签名方式

    常见的加密算法可以分成三类,对称加密算法,非对称加密算法和单向加密算法。对称加密算法(加解密密钥相同)常见的有:D...

  • 快速了解常用的非对称加密算法,再也不用担心面试官的刨根问底

    面试官:说一说你常用的加密算法有哪些? 加密算法通常被分为两种:对称加密算法和非对称加密算法。其中,对称加密算法在...

网友评论

      本文标题:对称加密算法之四

      本文链接:https://www.haomeiwen.com/subject/pgsffrtx.html