Java实现AES算法

首先推荐一些类和接口的地址,你可以通过这些内容更好的了解下面的代码:

类 KeyGenerator:http://www.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/javax/crypto/KeyGenerator.html

接口 SecretKey:http://www.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/javax/crypto/SecretKey.html

类 SecretKeySpec:http://www.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/javax/crypto/spec/SecretKeySpec.html

类 Cipher:http://www.oschina.net/uploads/doc/javase-6-doc-api-zh_CN/javax/crypto/Cipher.html

 

 

/*加密类:Encryption */

package com.hyit.AES.Java;

import java.io.UnsupportedEncodingException;
import java.security.*;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;


public class Encryption {
	public static byte[] encrypt(String content, String password) {   
        try {              
                KeyGenerator kgen = KeyGenerator.getInstance("AES"); //KeyGenerator提供(对称)密钥生成器的功能。使用getInstance 类方法构造密钥生成器。
           kgen.init(128, new SecureRandom(password.getBytes()));//使用用户提供的随机源初始化此密钥生成器,使其具有确定的密钥大小。
           SecretKey secretKey = kgen.generateKey();   
                byte[] enCodeFormat = secretKey.getEncoded();   
                SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");//使用SecretKeySpec类来根据一个字节数组构造一个 SecretKey,,而无须通过一个(基于 provider 的)SecretKeyFactory.
                Cipher cipher = Cipher.getInstance("AES");// 创建密码器   //为创建 Cipher 对象,应用程序调用 Cipher 的 getInstance 方法并将所请求转换 的名称传递给它。还可以指定提供者的名称(可选)。 
           byte[] byteContent = content.getBytes("utf-8");   
                cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化   
           byte[] result = cipher.doFinal(byteContent); //按单部分操作加密或解密数据,或者结束一个多部分操作。数据将被加密或解密(具体取决于此 Cipher 的初始化方式)。   
           System.out.println("加密后:"+result);
                return result; // 加密   
        } catch (NoSuchAlgorithmException e) {   
                e.printStackTrace();   
        } catch (NoSuchPaddingException e) {   
                e.printStackTrace();   
        } catch (InvalidKeyException e) {   
                e.printStackTrace();   
        } catch (UnsupportedEncodingException e) {   
                e.printStackTrace();   
        } catch (IllegalBlockSizeException e) {   
                e.printStackTrace();   
        } catch (BadPaddingException e) {   
                e.printStackTrace();   
        }   
        return null;   
	}  
}

 

 

 

/*解密类:Decryption*/

package com.hyit.AES.Java;

import java.security.*;

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;

public class Decryption {
	public static byte[] decrypt(byte[] content, String password) {   
        try { 
            KeyGenerator kgen = KeyGenerator.getInstance("AES");   
            kgen.init(128, new SecureRandom(password.getBytes()));   
            SecretKey secretKey = kgen.generateKey();   
            byte[] enCodeFormat = secretKey.getEncoded();   
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");               
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器   
            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化   
            byte[] result = cipher.doFinal(content);   
            return result; // 加密   
        } catch (NoSuchAlgorithmException e) {   
            e.printStackTrace();   
        } catch (NoSuchPaddingException e) {   
            e.printStackTrace();   
        } catch (InvalidKeyException e) {   
            e.printStackTrace();   
        } catch (IllegalBlockSizeException e) {   
                e.printStackTrace();   
        } catch (BadPaddingException e) {   
                e.printStackTrace();   
        }   
        return null;   
	}  
}

 

 

/*测试类:Main*/

package com.hyit.AES.Java;

public class Main {
	public static void main(String[] args) {
		String content = "test";   
		String password = "12345678";   
		//加密   
		System.out.println("加密前:" + content);   
		byte[] encryptResult = Encryption.encrypt(content, password);
		//解密   
		byte[] decryptResult =Decryption.decrypt(encryptResult,password);   
		System.out.println("解密后:" + new String(decryptResult));  
	}

}

 

结果:

加密前:test

加密后:(此处不唯一)

加密后:test

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值