2019年09月18日(星期三)  农历:己亥年八月二十

作者:三年。分类: JAVA

代码:

package com.techzero.aes;

import java.io.UnsupportedEncodingException;

import java.security.InvalidKeyException;

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;

/**

* AESTest.java

*

* @author Techzero

* @Email techzero@163.com

* @Time 2013-12-12 下午1:25:44

*/

public class AESTest {

public static void main(String[] args) {

String content = "AEStest";

String password = "AEStest";

System.out.println("密 钥:" + password);

System.out.println("加密前:" + content);

// 加密

String encryptResult = encrypt(content, password);

System.out.println("加密后:" + encryptResult);

// 解密

String decryptResult = decrypt(encryptResult, password);

System.out.println("解密后:" + decryptResult);

}

/**

* 加密

*

* @param content

*            待加密内容

* @param key

*            加密的密钥

* @return

*/

public static String encrypt(String content, String key) {

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128, new SecureRandom(key.getBytes()));

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");

byte[] byteContent = content.getBytes("utf-8");

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

byte[] byteRresult = cipher.doFinal(byteContent);

StringBuffer sb = new StringBuffer();

for (int i = 0; i < byteRresult.length; i++) {

String hex = Integer.toHexString(byteRresult[i] & 0xFF);

if (hex.length() == 1) {

hex = '0' + hex;

}

sb.append(hex.toUpperCase());

}

return sb.toString();

} 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;

}

/**

* 解密

*

* @param content

*            待解密内容

* @param key

*            解密的密钥

* @return

*/

public static String decrypt(String content, String key) {

if (content.length() < 1)

return null;

byte[] byteRresult = new byte[content.length() / 2];

for (int i = 0; i < content.length() / 2; i++) {

int high = Integer.parseInt(content.substring(i * 2, i * 2 + 1), 16);

int low = Integer.parseInt(content.substring(i * 2 + 1, i * 2 + 2), 16);

byteRresult[i] = (byte) (high * 16 + low);

}

try {

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128, new SecureRandom(key.getBytes()));

SecretKey secretKey = kgen.generateKey();

byte[] enCodeFormat = secretKey.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

byte[] result = cipher.doFinal(byteRresult);

return new String(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;

}

}

运行结果:

密 钥:AEStest

加密前:AEStest

加密后:24C2584138719D77C4FEBDE382D84648

解密后:AEStest

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

已有 0/1600 人参与

发表评论:



手Q扫描加入Java初学者群