AES加密算法实现
2016-05-13 17:24
302 查看
实现的类如下
import java.security.SecureRandom
import javax.crypto.spec.SecretKeySpec
import javax.crypto.{ Cipher, KeyGenerator}
/**
* Created by neunn on 2016/5/12.
*/
class AES ( val data:Array[Byte],key:String){
val kgen = KeyGenerator.getInstance("AES");
val random:SecureRandom=SecureRandom.getInstance("SHA1PRNG");
random.setSeed(key.getBytes());
kgen.init(128, random);//密钥长度定为128位
val secretKey = kgen.generateKey();
val enCodeFormat = secretKey.getEncoded();
val Key = new SecretKeySpec(enCodeFormat, "AES");
val cipher = Cipher.getInstance("AES");// 创建密码器
def encrypt():Array[Byte]= {
cipher.init(Cipher.ENCRYPT_MODE, Key);// 初始化
val result = cipher.doFinal(data);
result; // 加密
}
def decrypt():Array[Byte]= {
cipher.init(Cipher.DECRYPT_MODE, Key);// 初始化
val result = cipher.doFinal(data);
result; // 解密
}
}
博主参考了这篇文章http://blog.csdn.net/hbcui1984/article/details/5201247
注意:
这里的key值不是真的密钥,而是通过以key值为参数用伪随机数生成的,同一套程序在不同系统可能或出现差异,比如博主用上诉文章的代码,在用windows给linux发送时,两个系统生成了不同的密钥,发生了:
javax.crypto.BadPaddingException: Given final block not properly padded 错误
之后修改了代码,变成了本文的代码,这个错误就解决了
import java.security.SecureRandom
import javax.crypto.spec.SecretKeySpec
import javax.crypto.{ Cipher, KeyGenerator}
/**
* Created by neunn on 2016/5/12.
*/
class AES ( val data:Array[Byte],key:String){
val kgen = KeyGenerator.getInstance("AES");
val random:SecureRandom=SecureRandom.getInstance("SHA1PRNG");
random.setSeed(key.getBytes());
kgen.init(128, random);//密钥长度定为128位
val secretKey = kgen.generateKey();
val enCodeFormat = secretKey.getEncoded();
val Key = new SecretKeySpec(enCodeFormat, "AES");
val cipher = Cipher.getInstance("AES");// 创建密码器
def encrypt():Array[Byte]= {
cipher.init(Cipher.ENCRYPT_MODE, Key);// 初始化
val result = cipher.doFinal(data);
result; // 加密
}
def decrypt():Array[Byte]= {
cipher.init(Cipher.DECRYPT_MODE, Key);// 初始化
val result = cipher.doFinal(data);
result; // 解密
}
}
博主参考了这篇文章http://blog.csdn.net/hbcui1984/article/details/5201247
注意:
这里的key值不是真的密钥,而是通过以key值为参数用伪随机数生成的,同一套程序在不同系统可能或出现差异,比如博主用上诉文章的代码,在用windows给linux发送时,两个系统生成了不同的密钥,发生了:
javax.crypto.BadPaddingException: Given final block not properly padded 错误
之后修改了代码,变成了本文的代码,这个错误就解决了
相关文章推荐
- 博客换到自己的个人网站
- python核心编程第二版中的网络爬爬虫修改
- java中文乱码解决之道(七)—–JSP页面编码过程
- Android Dev Intro - SurfaceView Vs View
- Unity Shader学习4——光栅阶段
- 《虚幻4 - ARPG实战教程》FAQ
- Java的可变类与不可变类
- Linux下安装rlwrap
- Git pull提示错误
- 最大流最小割定理
- Servlet 生命周期、工作原理
- IOS9 那些坑
- 程序自重启
- ajax返回json数据
- 算法05 之红-黑树
- <<web>>2D,transform
- keepalived安装配置
- android Bitmap,byte[],Drawable之间的转换
- json11库的使用
- Android Studio android APP混淆打包