tangyuxian
文章80
标签37
分类5

文章分类

文章归档

算法-对称加密

算法-对称加密

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

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

img

JAVA加密解密示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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));

  }

}

输出结果:

1
2
3
4
5
秘钥长度是: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 协议进行许可