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