package com.curiousby.util; import java.security.Key; import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Hex; /** * AES Coder<br/> * secret key length: 128bit, default: 128 bit<br/> * mode: ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128<br/> * padding: Nopadding/PKCS5Padding/ISO10126Padding/ * @author curiousby@163.com baoyou * */ public class AESUtil { /** * 密钥算法 */ private static final String KEY_ALGORITHM = "AES"; private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; /** * 初始化密钥 * * @return byte[] 密钥 * @throws Exception */ public static byte[] initSecretKey() { //返回生成指定算法的秘密密钥的 KeyGenerator 对象 KeyGenerator kg = null; try { kg = KeyGenerator.getInstance(KEY_ALGORITHM); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return new byte[0]; } //初始化此密钥生成器,使其具有确定的密钥大小 //AES 要求密钥长度为 128 kg.init(128); //生成一个密钥 SecretKey secretKey = kg.generateKey(); return secretKey.getEncoded(); } /** * 转换密钥 * * @param key 二进制密钥 * @return 密钥 */ private static Key toKey(byte[] key) { //生成密钥 return new SecretKeySpec(key, KEY_ALGORITHM); } /** * 加密 * * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data, Key key) throws Exception { return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM); } /** * 加密 * * @param data 待加密数据 * @param key 二进制密钥 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data, byte[] key) throws Exception { return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM); } /** * 加密 * * @param data 待加密数据 * @param key 二进制密钥 * @param cipherAlgorithm 加密算法/工作模式/填充方式 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception { //还原密钥 Key k = toKey(key); return encrypt(data, k, cipherAlgorithm); } /** * 加密 * * @param data 待加密数据 * @param key 密钥 * @param cipherAlgorithm 加密算法/工作模式/填充方式 * @return byte[] 加密数据 * @throws Exception */ public static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception { //实例化 Cipher cipher = Cipher.getInstance(cipherAlgorithm); //使用密钥初始化,设置为加密模式 cipher.init(Cipher.ENCRYPT_MODE, key); //执行操作 return cipher.doFinal(data); } /** * 解密 * * @param data 待解密数据 * @param key 二进制密钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data, byte[] key) throws Exception { return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM); } /** * 解密 * * @param data 待解密数据 * @param key 密钥 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data, Key key) throws Exception { return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM); } /** * 解密 * * @param data 待解密数据 * @param key 二进制密钥 * @param cipherAlgorithm 加密算法/工作模式/填充方式 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception { //还原密钥 Key k = toKey(key); return decrypt(data, k, cipherAlgorithm); } /** * 解密 * * @param data 待解密数据 * @param key 密钥 * @param cipherAlgorithm 加密算法/工作模式/填充方式 * @return byte[] 解密数据 * @throws Exception */ public static byte[] decrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception { //实例化 Cipher cipher = Cipher.getInstance(cipherAlgorithm); //使用密钥初始化,设置为解密模式 cipher.init(Cipher.DECRYPT_MODE, key); //执行操作 return cipher.doFinal(data); } /** * @return */ public static String encrypt(byte[] data, String key) throws Exception { byte[] bKey = key.getBytes(); return Hex.encodeHexString(encrypt(data, bKey, DEFAULT_CIPHER_ALGORITHM)); } /** * @return */ public static String decrypt(String data, String key) throws Exception { byte[] bKey = key.getBytes(); byte[] dBytes = decrypt(Hex.decodeHex(data.toCharArray()), bKey, DEFAULT_CIPHER_ALGORITHM); return new String(dBytes); } /** * @return */ public static String encrypt(String data, String key) { try { byte[] encr = encrypt(data.getBytes(), hexStringToByte(key)); return byteToHexString(encr); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 二进制byte[]转十六进制string */ public static String byteToHexString(byte[] bytes) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String strHex = Integer.toHexString(bytes[i]); if (strHex.length() > 3) { sb.append(strHex.substring(6)); } else { if (strHex.length() < 2) { sb.append("0" + strHex); } else { sb.append(strHex); } } } return sb.toString(); } /** * 十六进制string转二进制byte[] */ public static byte[] hexStringToByte(String s) { byte[] baKeyword = new byte[s.length() / 2]; for (int i = 0; i < baKeyword.length; i++) { try { baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16)); } catch (Exception e) { System.out.println("十六进制转byte发生错误!!!"); e.printStackTrace(); } } return baKeyword; } // public static void main(String[] args) { // try { // String data = "test aes !"; // String str = "20ac7f405c1811089ed981e6454b1d37"; // byte[] encr = encrypt(data.getBytes(), hexStringToByte(str)); // System.out.println(byteToHexString(encr)); // //解密 // byte[] decr = decrypt(encr, hexStringToByte(str)); // // System.out.println(new String(decr)); // // } catch (Exception e) { // e.printStackTrace(); // } // // } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和微信捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战例程可以帮助开发者更好地掌握Qt环境下的加密解密操作,提高数据安全保护能力。
《AES加密解密实验报告》 AES,全称为高级加密标准(Advanced Encryption Standard),是密码学领域中的一个重要标准,由美国联邦政府采纳,用于替换原有的DES加密算法。AES由比利时密码学家Joan Daemen和Vincent ...
在本项目中,"用C语言实现的AES加密解密算法"是针对AES算法的一种C语言实现,这允许开发者在不依赖特定库的情况下,在C环境中进行数据的加密和解密操作。 首先,我们需要理解AES的工作原理。AES的核心是基于替换和...
在iOS和Android平台上实现AES加密解密是开发者经常遇到的任务,尤其对于需要跨平台传输和存储敏感信息的场景。本篇文章将详细探讨AES加密解密算法在iOS和Android平台上的实现原理以及具体步骤。 首先,AES算法基于...
### C# 实现 AES 加密解密算法 #### 概述 在计算机科学与信息安全领域,数据加密技术是一项至关重要的技术。AES(Advanced Encryption Standard,高级加密标准)是一种广泛使用的对称加密算法,用于保护敏感数据的...
"本地图片AES加密解密"是一个针对这个问题提出的技术方案,旨在保护存储在本地设备上的图片不被未经授权的第三方访问。AES(Advanced Encryption Standard)加密是一种广泛应用的对称加密算法,因其高效和安全性而...
本压缩包"uniapp 前后端AES加密解密.rar"正是为了解决这一问题,它包含了在uniapp环境下实现前后端AES加密解密的方法。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,具有...
在uni-app中,可以使用JavaScript的crypto-js库来实现AES加密解密。首先,你需要通过HBuilderX引入该库,然后在uni-app代码中使用: ```javascript const CryptoJS = require('crypto-js'); const key = 'your_...
' 功能: AES加密解密 password<==>hwWpiegaWDeE8kTlb/5BQg== , 8705a989e81a583784f244e56ffe4142 ' [Str] 预备转换的byte ' [StrKey] 16位的密钥 ' [StrIv] 16位的偏移 ' [Encrypt] 加密(缺省值)还是解密 ' ...
标题 "C语言实现的AES加密解密" 涉及到的是高级加密标准(Advanced Encryption Standard,简称AES),这是一种广泛使用的对称加密算法,用于保护数据的安全性。AES由NIST(美国国家标准与技术研究所)在2001年标准化...
本项目"大文件AES加密解密程序"就是针对这一需求而设计的,适用于VS2019开发环境,可能无法在较低版本的Visual Studio中正常运行。 AES,全称为Advanced Encryption Standard,是一种广泛使用的对称加密算法,以其...
VB.NET实现AES加密解密代码,可直接使用
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果...
"C/C++与Java互通AES加密解密"的主题就是这两个议题的结合。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,提供了强效的数据保护。本话题主要探讨如何在C/C++和Java之间使用...
本项目“C# AES加密解密小工具”提供了一个简单的AES ECB模式加密和解密实现,适用于对文本文件进行安全处理。 首先,AES是一种块密码,它将明文分成128位的块进行操作。ECB(Electronic Codebook)模式是最基础的...
AES加密解密轮转算法工具,最大支持256bit长度的密钥,明文支持HEX和字串。可供学习设计参考。
在C语言中实现AES加密解密是一项基础且重要的技能,特别是在嵌入式系统和低级别编程中。 AES的核心是一个名为Rijndael的密码,由比利时密码学家Joan Daemen和Vincent Rijmen设计。它的工作原理基于一系列的替换和...
AES加密解密验证工具(支持各种加密模式)
本篇文章将详细介绍如何在VB6环境中使用AES加密解密文本串和文件的DLL动态库。 首先,AES是一种块密码,它以128位的数据块为单位进行操作。AES支持三种不同的密钥长度:128位、192位和256位,其中128位是最常见的...
**AES加密解密程序概述** AES(Advanced Encryption Standard),即高级加密标准,是目前广泛使用的对称加密算法,因其高效性和安全性而备受青睐。MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于...