|

楼主 |
发表于 2022-4-5 20:15:22
|
显示全部楼层
本帖最后由 张黎曦 于 2022-4-5 20:53 编辑
package mimaxue;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;
import java.util.Base64.Encoder;
import java.util.Base64.Decoder;
public class AesCryptTest {
public final String KEY_ALGORITHM = "AES";
public final String CIPHER_ALGORITHM_CBC = "AES/CBC/PKCS5Padding";
public SecretKey secretKey;
public Cipher cipher;
public static void main(String[] args) throws Exception {
AesCryptTest act = new AesCryptTest();
String originString = "拒绝摆烂,从我做起!";
// 加密数据
System.out.println("加密数据: " + originString);
String enString = act.encode(originString);
// 解密数据
String deString = act.decode(enString);
System.out.println("解密结果: " + deString);
}
public String encode(String oriStr) throws Exception {
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(getIV());
// 根据密钥初始化密钥生成器
kgen.init(128, secureRandom);
secretKey = kgen.generateKey();
cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
cipher.init(Cipher.ENCRYPT_MODE, secretKey,
new IvParameterSpec(getIV()));// 使用*加密*模式初始化 密钥
// 加密数据
byte[] encByte = cipher.doFinal(oriStr.getBytes());
// 编码,将由逗号、数字组成的字节数组转化为不易辨别的字符串
Encoder enc = Base64.getEncoder();
String encStr = enc.encodeToString(encByte);
System.out.println("加密后数组(编码后) : " + encStr);
return encStr;
}
public String decode(String encStr) throws Exception {
Base64.Decoder dec =Base64.getDecoder();
byte[] encByteArr = null;
encByteArr = dec.decode(encStr);
KeyGenerator kgen = KeyGenerator.getInstance(KEY_ALGORITHM);
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(getIV());
kgen.init(128, secureRandom);
secretKey = kgen.generateKey();
cipher = Cipher.getInstance(CIPHER_ALGORITHM_CBC);
cipher.init(Cipher.DECRYPT_MODE, secretKey,
new IvParameterSpec(getIV()));// 使用*解密*模式初始化 密钥
// 解密数据
byte[] decByte = cipher.doFinal(encByteArr);
System.out.println("解密后数组 : " + Arrays.toString(decByte));
return new String(decByte);
}
static byte[] getIV() {
String iv = "0123456789abcdef";
return iv.getBytes();
}
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|