首页 技术 正文
技术 2022年11月23日
0 收藏 433 点赞 3,183 浏览 1779 个字

AES是一种对称加密方式,比DES更为安全,用一个秘钥加密数据之后,可以用同一个秘钥对加密后的数据解密还原,以下是一套以字符串为例子的使用全过程演示,

用到了

commons-codec.jar
 package testEncrypt; import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64;
//import sun.misc.BASE64Encoder;
public class TestAesEncrypt { public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException {
//随机生成密钥
KeyGenerator keygen = KeyGenerator.getInstance("AES");
//SecureRandom random = new SecureRandom(Base64.decodeBase64("abc"));
SecureRandom random = new SecureRandom();
keygen.init(random);
Key key = keygen.generateKey();
//获取秘钥字符串
String key64Str = Base64.encodeBase64String(key.getEncoded());
//要加密的数据
String dataStr="da89gh9qj3ebg9babjdslgbuqgb&FTUG^(GB";
System.out.println("要加密的数据:"+dataStr); //还原秘钥字符串到秘钥byte数组
byte[] keyByteArray = Base64.decodeBase64(key64Str);
//重新形成秘钥,SecretKey是Key的子类
SecretKey secretKey = new SecretKeySpec(keyByteArray, "AES"); //初始化加密组件
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey); //加密后的数据,首先将字符串转为byte数组,然后加密,为便于保存先转为base64
String encryptedDataStr = Base64.encodeBase64String(cipher.doFinal(dataStr.getBytes()));
System.out.println("加密后的数据:"+encryptedDataStr); //将加密组件的模式改为解密
cipher.init(Cipher.DECRYPT_MODE, secretKey);
//和上面的加密相反,先解base64,再解密,最后将byte数组转为字符串
String decodeDataStr = new String(cipher.doFinal(Base64.decodeBase64(encryptedDataStr)));
System.out.println("解密后的数据:"+decodeDataStr);
} }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,964
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,486
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,331
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,114
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,747
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,781