AES加解密实例
package com.bijian.study; 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; import org.apache.axis.encoding.Base64; public class AESTools { private static String password = "好复杂的密码complex password,没见过这么奇怪的密码"; /** * 获取密码 */ public static String getPassword() { return password; } /** * 加密 * @param content * @param password * @return */ public static byte[] encrypt(String content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(getKeyByStr(password)); kgen.init(128, random); SecretKey secretKey = kgen.generateKey(); byte[] enCodeFormat = secretKey.getEncoded(); SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); Cipher cipher = Cipher.getInstance("AES");// 创建密码器 byte[] byteContent = content.getBytes("UTF-8"); 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; } /** * 解密 * @param content * @param password * @return */ public static byte[] decrypt(byte[] content, String password) { try { KeyGenerator kgen = KeyGenerator.getInstance("AES"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(getKeyByStr(password)); kgen.init(128, random); 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; } public static byte[] getKeyByStr(String str) { byte[] bRet = new byte[str.length() / 2]; for (int i = 0; i < str.length() / 2; i++) { Integer itg = new Integer(16 * getChrInt(str.charAt(2 * i)) + getChrInt(str.charAt(2 * i + 1))); bRet[i] = itg.byteValue(); } return bRet; } public static int getChrInt(char chr) { int iRet = 0; if (chr == "0".charAt(0)) iRet = 0; if (chr == "1".charAt(0)) iRet = 1; if (chr == "2".charAt(0)) iRet = 2; if (chr == "3".charAt(0)) iRet = 3; if (chr == "4".charAt(0)) iRet = 4; if (chr == "5".charAt(0)) iRet = 5; if (chr == "6".charAt(0)) iRet = 6; if (chr == "7".charAt(0)) iRet = 7; if (chr == "8".charAt(0)) iRet = 8; if (chr == "9".charAt(0)) iRet = 9; if (chr == "A".charAt(0)) iRet = 10; if (chr == "B".charAt(0)) iRet = 11; if (chr == "C".charAt(0)) iRet = 12; if (chr == "D".charAt(0)) iRet = 13; if (chr == "E".charAt(0)) iRet = 14; if (chr == "F".charAt(0)) iRet = 15; return iRet; } public static String decryptString(String contents) { return new String(decrypt(Base64.decode(contents), password)); } public static String encryptString(String contents) { return Base64.encode(encrypt(contents, password)); } public static void main(String[] args) { String text = "深圳欢迎您!Welcome to shenzhen!"; //加密 String encryptStr = AESTools.encryptString(text); System.out.println("text length:" + text.length() + ",text:" + text); System.out.println("encryptStr length:" + encryptStr.length() + ",encryptStr" + encryptStr); System.out.println("密文比明文增加长度add length:" + (encryptStr.length() - text.length())); //解密 String decryptStr = AESTools.decryptString(encryptStr); System.out.println("decryptStr length:" + decryptStr.length() + ",decryptStr:" + decryptStr); } }
运行结果:
text length:26,text:深圳欢迎您!Welcome to shenzhen! encryptStr length:64,encryptStrujOEp9losb7mJx8a8Ht2nbCNaVtfCrAuKt9JRjTGdULpPYJOUr0nvzYQ9rvqWB6z 密文比明文增加长度add length:38 decryptStr length:26,decryptStr:深圳欢迎您!Welcome to shenzhen!
相关推荐
VB.NET实现AES加密解密代码,可直接使用
本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原先的输入,运行的结果...
在实际应用中,AES加解密通常配合其他安全措施,如HMAC(Hash-based Message Authentication Code)用于验证数据完整性,或者使用非对称加密(如RSA)来安全地交换AES密钥。 总结来说,AES加解密是保障数据安全的...
Android 使用 AES 加密和解密文件实例代码 在 Android 应用程序中,使用 AES(Advanced Encryption Standard)加密和解密文件是一种常见的安全措施。本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并...
本篇将详细解析给出的Node.js AES加解密实例,帮助你理解如何在实际项目中实现AES加密和解密。 首先,我们需要引入Node.js内置的`crypto`模块,它是处理加密和哈希算法的核心库。 ```javascript const crypto = ...
PB下的加密解密的简单算法 原理上对原字符串的每个字符做了数值转换,在加上加密因子,经过颠倒错位后再形成加密后数值,解密时再颠倒转换回来。 比较简单,现在用于对安全性要求不高的应用里。 原来发了一份,资源...
项目中的AES加解密.sln文件是Visual Studio的解决方案文件,包含了项目的配置信息和依赖关系。打开此文件,可以使用Visual Studio来编译和运行项目。另一个未列出完全名称的文件可能是源代码文件,可能包含了实现...
**AES-128实例** - 明文区段:128位,Nb = 4。 - 密钥长度:128位,Nk = 4。 - 重复次数:Nr = 6 + max(Nb, Nr) = 10。 **AES加密过程** AES加密过程包含以下四个主要步骤: 1. **回合密钥加法(AddRoundKey)**...
在C#中,我们可以利用.NET框架提供的System.Security.Cryptography命名空间中的类来实现AES加解密。本篇将详细介绍C#中如何使用AES进行数据的加密与解密。 首先,AES的核心概念包括密钥、初始化向量(IV)和块大小...
1. **AES类的实例化**:首先,需要创建一个AES加密器实例,设置密钥和初始化向量(IV)。密钥和IV是AES加密的重要参数,它们的长度根据所选的AES模式(如CBC、ECB等)有所不同,通常密钥应保持为128、192或256位。 ...
pb11.5 + pbni + openssl实现RSA\SM2\AES加密解密,平时用不到这些,做民营医疗机构监管平台对接,AK/SK接口认证,需要用到RSA\AES才做,分享出来,希望能对有需要的人有点帮助。
描述中提到,我们需要确保在不同语言环境下进行AES加解密时,加密模式(Mode)和填充方式(Padding)保持一致,这是确保数据在这些语言之间能正确解密的关键。常见的AES模式有ECB(Electronic Codebook)、CBC...
通常,AES加密包括多个相同步骤的轮,每轮都包括字节替换、行移位、列混淆和轮密钥加等操作。 `Delphi_Lazarus版AES加密解密使用说明.txt` 文件则提供了如何在Delphi或Lazarus项目中集成和使用这个AES模块的指导。...
2. **编写代码**:利用.d.ts文件提供的类型定义,创建AES加密和解密的实例,设置密钥,并调用相应的加密或解密方法。 3. **数据处理**:在游戏逻辑中,可以将需要加密的数据传递给加密函数,得到加密后的密文存储或...
**AES加解密系统(C++)** AES,全称为Advanced Encryption Standard,即高级加密标准,是目前广泛应用的块密码算法。它在2001年被美国国家标准与技术研究所(NIST)采纳为联邦信息处理标准(FIPS),取代了DES...
同时,该程序可以作为学习AES加密和MFC编程的一个实例,开发者可以根据需求进行二次开发,例如增加密码保护、多线程处理等功能。 总之,这个"MFC实现的AES加密解密程序"结合了强大的加密算法和易用的用户界面,为...
在C#中,可以利用.NET框架提供的System.Security.Cryptography命名空间中的类来实现AES加解密。具体来说,我们将关注两个核心文件:`ByteUtil.cs`和`AesHelper.cs`。 `ByteUtil.cs`通常包含一系列与字节数组操作...
这套资源涵盖了AES加密解密在Java和JavaScript两端的应用,使得数据在客户端与服务器之间的传输更加安全。 在Java中,AES加密通常涉及以下步骤: 1. **密钥生成**:首先需要一个密钥,可以使用`javax.crypto....
在VB(Visual Basic)网络编程中,AES加解密模块扮演着重要的角色,尤其对于数据的安全传输和存储至关重要。Winsock控件是VB中用于实现网络通信的基础工具,它允许开发者创建简单的聊天程序或进行局域网的网络编程。...