java使用Hex编码解码实现Aes加密解密功能示例

网友投稿 536 2023-06-20


java使用Hex编码解码实现Aes加密解密功能示例

本文实例讲述了java使用Hex编码解码实现Aes加密解密功能。分享给大家供大家参考,具体如下:

这里的Aes加密解密方法使用Hex进行了编码解码

package com.baidu.wallet.bdwallet.utils;

import java.io.UnsupportedEncodingException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.DecoderException;

import org.apache.commons.codec.binary.Hex;

public class Test {

private static final String AES="AES";

private static final String UTF8="UTF-8";

/**

* AES加密

* @param content

* @param pkey

* @return

* @throws DecoderException

*/

private static byte[] encrypt(String content, String pkey) throws DecoderException {

try {

String private_key=pkey;

byte[] encodeFormat=null;

try {

//秘钥 Hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了Hex编码后的值,所以在使用的时候要进行解码

encodeFormat = Hex.decodeHex(private_key.toCharArray());

} catch (DecoderException e) {

e.printStackTrace();

}

SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);

// Cipher对象实际完成加密操作

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

// 加密内容进行编码

byte[] byteContent = content.getBytes(UTF8);

// 用密匙初始化Cipher对象

cipher.init(Cipher.ENCRYPT_MODE, key);

// 正式执行加密操作

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

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;

}

/**

* AES解密

* @param contents

* @param password

* @return

* @throws DecoderException

*/

private static byte[] decrypt(String contents, String password) throws DecoderException {

try {

//密文使用Hex解码

byte[]content = Hex.decodeHex(contents.toCharArray());

//秘钥 Hex解码为什么秘钥要进行解码,因为秘钥是某个秘钥明文进行了Hex编码后的值,所以在使用的时候要进行解码

byte[] encodeFormat = Hex.decodeHex(password.toCharArray());

SecretKeySpec key = new SecretKeySpec(encodeFormat, AES);

// Cipher对象实际完成加密操作

Cipher cipher = Cipher.getInstance(AES);

// 用密匙初始化Cipher对象

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;

}

/**

* Aes加密

* @param context 明文

* http://@param private_key 秘钥

* @return

* @throws DecoderException

*/

public static String encryption(String context,String private_key) throws DecoderException{

//加密后的明文也就变成了密文

byte[] encryptResult = encrypt(context, private_key);

//密码文Hex编码

String encryptResultStr = Hex.encodeHexString(encryptResult);

return encryptResultStr;

}

/**

* Aes解密

* @param context 密文

* @param private_key 秘钥

* @return

* @throws DecoderException

* @throws UnsupportedEncodingException

*/

pmuUvmQfnNublic static String decryption(String context,String private_key) throws DecoderException, UnsupportedEncodingException{

//这里的密文解密前先进行了Hex解码

byte[] decryptResult = decrypt(context, private_key);

String result = new String(decryptResult, UTF8);

return result;

}

public static void main(String[] args) throws UnsupportedEncodingException, DecoderException {

//加密内容

String content = "123456787654321";

//AES加密解密秘钥

String password = "这个值一般都是给定的,双发都知道";

// 加密

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

// 调用加密方法

String encryptResultStr = encryption(content, password);

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

// 调用解密方法

String result = decryption(encryptResultStr, password);

// 解密内容进行解码

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

}

}

这个方法在正式的项目中已经在使用木有问题,注意这里的AES加密解密你要要对哦……

上面使用的就是org.apache.commons.codec.binary.Hex这个类的方法,在maven中配置如下:

commons-codec

commons-codec

1.4

注意:这里要使用1.4以及以上版本,应为1.4以下的没有Hex.encodeHexString(byte[])这个方法!

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

密码安全性在线检测:

http://tools.jb51.net/password/my_password_safe

高强度密码生成器:

http://tools.jb51.net/password/CreateStrongPassword

迅雷、快车、旋风URL加密/解密工具:

http://tools.jb51.net/password/urlrethunder

在线散列/哈希算法加密工具:

http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:

http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:

http://tools.jb51.net/password/sha_encode

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java实现的MD5摘要算法完整实例
下一篇:15个顶级Java多线程面试题(附答案)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~