加密算法使用(四):AES的使用
2016-04-26 17:54
302 查看
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); } }
相关文章推荐
- 重载 QApplication 类
- 外观模式
- AndroidStudio常用设置
- 最小生成树prim算法
- poj 1037 A decorative fence dp+序列构造
- Android使用Handler防止内存泄漏
- 颜色转换
- 一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP
- 如何在页面中添加打印功能
- cf583C. GCD Table
- C++实现插入排序
- 持续化集成: Jenkins + 蒲公英
- MySQL主从复制数据库升级完成后检查项
- Docker使用
- SendEmail语法
- 迭代算法
- iOS 开发谨慎使用成员变量
- Linearlayout
- Android 控件 下拉刷新 android-uitra-pull-to-refresh
- ES6之let