tangyuxian
文章79
标签37
分类5
算法-对称加密

算法-对称加密

加密和解密使用同样规则(”密钥”),这种算法被称为:”对称加密算法”。

1976年以前,所有的加密方法都是同一种模式,甲方选择某一种加密规则,对信息进行加密,乙方使用同一种规则,对信息进行解密,由于加密和解密使用同样规则(”密钥”),这种算法被称为:”对称加密算法”。

img

JAVA加密解密示例代码

package com.netty.demo.rsa;

 

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.security.SecureRandom;

 

public class HexTest {

 

  /**

   \* AES/ECB/PKCS5Padding (128)

   \* AES加密 ECB模式 PKCS5填充方式 密钥长度必须为16个字节(128位)

   */

  public static void main(String[] args) throws Exception {

​    //密钥生成器

​    KeyGenerator kgen = KeyGenerator.getInstance("AES");

​    //设置密钥长度128位

​    kgen.init(128, new SecureRandom());

​    //生成key

​    SecretKey key = kgen.generateKey();

 

​    //长度为16的二进制数组,密钥我们自己生成也可以.

​    byte[] keyBytes = key.getEncoded();

​    System.out.println("秘钥长度是:" + keyBytes.length + "字节(byte) " + keyBytes.length*8 +"位(bit)");

 

​    //创建AES的密钥

​    SecretKeySpec aesKey = new SecretKeySpec(keyBytes, "AES");

 

​    //加密 模式 填充方式

​    Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

​    cipher.init(Cipher.ENCRYPT_MODE, aesKey);

 

​    //加密

​    byte[] encrypt = cipher.doFinal("Hello Alice".getBytes());

​    System.out.println("加密后的字符串:" + new String(encrypt));

 

​    //解密

​    cipher.init(Cipher.DECRYPT_MODE, aesKey);

​    byte[] decrypt = cipher.doFinal(encrypt);

​    System.out.println("解密后的字符串:" + new String(decrypt));

  }

}

输出结果:

秘钥长度是:16字节(byte) 128位(bit)

加密后的字符串:aT��be�������K5�

解密后的字符串:Hello Alice

加密过程:

img

解密过程:

img

本文作者:温故而知新666
文章来源:https://liuhuaqiang.blog.csdn.net/
本文链接:https://www.tangyuxian.com/2021/05/13/%E5%90%8E%E7%AB%AF/%E7%AE%97%E6%B3%95/%E7%AE%97%E6%B3%95-%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可