AES加密算法实现

来源:互联网 发布:淘宝开店货铺太多好吗 编辑:程序博客网 时间:2024/05/20 00:10

实现的类如下

import java.security.SecureRandomimport javax.crypto.spec.SecretKeySpecimport 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 错误

之后修改了代码,变成了本文的代码,这个错误就解决了






1 0