JAVA code implementation: AES encryption
AES Encryption
AES is a reversible encryption algorithm that encrypts users' sensitive information.
This article will not delve into the principles of AES for the time being, but only focuses on the JAVA code to implement AES encryption and decryption.
JAVA code implementation
It is recommended that the encryption password be 16 digits to avoid adding 0 if the number of password digits is insufficient, resulting in inconsistent passwords and encryption and decryption errors.
IOS can set an encryption password of any length. JAVA only supports 16 bits/24 bits/32 bits. I don’t know if it can be of any length. I hope you can tell me.
package cn.roylion.common.util; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; /** * @Author: Roylion * @Description: AES算法封装 * @Date: Created in 9:46 2018/8/9 */ public class EncryptUtil{ /** * 加密算法 */ private static final String ENCRY_ALGORITHM = "AES"; /** * 加密算法/加密模式/填充类型 * 本例采用AES加密,ECB加密模式,PKCS5Padding填充 */ private static final String CIPHER_MODE = "AES/ECB/PKCS5Padding"; /** * 设置iv偏移量 * 本例采用ECB加密模式,不需要设置iv偏移量 */ private static final String IV_ = null; /** * 设置加密字符集 * 本例采用 UTF-8 字符集 */ private static final String CHARACTER = "UTF-8"; /** * 设置加密密码处理长度。 * 不足此长度补0; */ private static final int PWD_SIZE = 16; /** * 密码处理方法 * 如果加解密出问题, * 请先查看本方法,排除密码长度不足补"0",导致密码不一致 * @param password 待处理的密码 * @return * @throws UnsupportedEncodingException */ private static byte[] pwdHandler(String password) throws UnsupportedEncodingException { byte[] data = null; if (password == null) { password = ""; } StringBuffer sb = new StringBuffer(PWD_SIZE); sb.append(password); while (sb.length() < PWD_SIZE) { sb.append("0"); } if (sb.length() > PWD_SIZE) { sb.setLength(PWD_SIZE); } data = sb.toString().getBytes("UTF-8"); return data; } //======================>原始加密<====================== /** * 原始加密 * @param clearTextBytes 明文字节数组,待加密的字节数组 * @param pwdBytes 加密密码字节数组 * @return 返回加密后的密文字节数组,加密错误返回null */ public static byte[] encrypt(byte[] clearTextBytes, byte[] pwdBytes) { try { // 1 获取加密密钥 SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM); // 2 获取Cipher实例 Cipher cipher = Cipher.getInstance(CIPHER_MODE); // 查看数据块位数 默认为16(byte) * 8 =128 bit // System.out.println("数据块位数(byte):" + cipher.getBlockSize()); // 3 初始化Cipher实例。设置执行模式以及加密密钥 cipher.init(Cipher.ENCRYPT_MODE, keySpec); // 4 执行 byte[] cipherTextBytes = cipher.doFinal(clearTextBytes); // 5 返回密文字符集 return cipherTextBytes; } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 原始解密 * @param cipherTextBytes 密文字节数组,待解密的字节数组 * @param pwdBytes 解密密码字节数组 * @return 返回解密后的明文字节数组,解密错误返回null */ public static byte[] decrypt(byte[] cipherTextBytes, byte[] pwdBytes) { try { // 1 获取解密密钥 SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM); // 2 获取Cipher实例 Cipher cipher = Cipher.getInstance(CIPHER_MODE); // 查看数据块位数 默认为16(byte) * 8 =128 bit // System.out.println("数据块位数(byte):" + cipher.getBlockSize()); // 3 初始化Cipher实例。设置执行模式以及加密密钥 cipher.init(Cipher.DECRYPT_MODE, keySpec); // 4 执行 byte[] clearTextBytes = cipher.doFinal(cipherTextBytes); // 5 返回明文字符集 return clearTextBytes; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 解密错误 返回null return null; } //======================>BASE64<====================== /** * BASE64加密 * @param clearText 明文,待加密的内容 * @param password 密码,加密的密码 * @return 返回密文,加密后得到的内容。加密错误返回null */ public static String encryptBase64(String clearText, String password) { try { // 1 获取加密密文字节数组 byte[] cipherTextBytes = encrypt(clearText.getBytes(CHARACTER), pwdHandler(password)); // 2 对密文字节数组进行BASE64 encoder 得到 BASE6输出的密文 BASE64Encoder base64Encoder = new BASE64Encoder(); String cipherText = base64Encoder.encode(cipherTextBytes); // 3 返回BASE64输出的密文 return cipherText; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 加密错误 返回null return null; } /** * BASE64解密 * @param cipherText 密文,带解密的内容 * @param password 密码,解密的密码 * @return 返回明文,解密后得到的内容。解密错误返回null */ public static String decryptBase64(String cipherText, String password) { try { // 1 对 BASE64输出的密文进行BASE64 decodebuffer 得到密文字节数组 BASE64Decoder base64Decoder = new BASE64Decoder(); byte[] cipherTextBytes = base64Decoder.decodeBuffer(cipherText); // 2 对密文字节数组进行解密 得到明文字节数组 byte[] clearTextBytes = decrypt(cipherTextBytes, pwdHandler(password)); // 3 根据 CHARACTER 转码,返回明文字符串 return new String(clearTextBytes, CHARACTER); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 解密错误返回null return null; } //======================>HEX<====================== /** * HEX加密 * @param clearText 明文,待加密的内容 * @param password 密码,加密的密码 * @return 返回密文,加密后得到的内容。加密错误返回null */ public static String encryptHex(String clearText, String password) { try { // 1 获取加密密文字节数组 byte[] cipherTextBytes = encrypt(clearText.getBytes(CHARACTER), pwdHandler(password)); // 2 对密文字节数组进行 转换为 HEX输出密文 String cipherText = byte2hex(cipherTextBytes); // 3 返回 HEX输出密文 return cipherText; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 加密错误返回null return null; } /** * HEX解密 * @param cipherText 密文,带解密的内容 * @param password 密码,解密的密码 * @return 返回明文,解密后得到的内容。解密错误返回null */ public static String decryptHex(String cipherText, String password) { try { // 1 将HEX输出密文 转为密文字节数组 byte[] cipherTextBytes = hex2byte(cipherText); // 2 将密文字节数组进行解密 得到明文字节数组 byte[] clearTextBytes = decrypt(cipherTextBytes, pwdHandler(password)); // 3 根据 CHARACTER 转码,返回明文字符串 return new String(clearTextBytes, CHARACTER); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // 解密错误返回null return null; } /*字节数组转成16进制字符串 */ public static String byte2hex(byte[] bytes) { // 一个字节的数, StringBuffer sb = new StringBuffer(bytes.length * 2); String tmp = ""; for (int n = 0; n < bytes.length; n++) { // 整数转成十六进制表示 tmp = (java.lang.Integer.toHexString(bytes[n] & 0XFF)); if (tmp.length() == 1) { sb.append("0"); } sb.append(tmp); } return sb.toString().toUpperCase(); // 转成大写 } /*将hex字符串转换成字节数组 */ private static byte[] hex2byte(String str) { if (str == null || str.length() < 2) { return new byte[0]; } str = str.toLowerCase(); int l = str.length() / 2; byte[] result = new byte[l]; for (int i = 0; i < l; ++i) { String tmp = str.substring(2 * i, 2 * i + 2); result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF); } return result; } public static void main(String[] args) { String test = encryptHex("test", "1234567800000000"); System.out.println(test); System.out.println(decryptHex(test, "1234567800000000")); } }
Related recommendations:
Encryption and decryption - using php to implement aes encryption in java
AES encryption and decryption C# code
The above is the detailed content of JAVA code implementation: AES encryption. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

Capsules are three-dimensional geometric figures, composed of a cylinder and a hemisphere at both ends. The volume of the capsule can be calculated by adding the volume of the cylinder and the volume of the hemisphere at both ends. This tutorial will discuss how to calculate the volume of a given capsule in Java using different methods. Capsule volume formula The formula for capsule volume is as follows: Capsule volume = Cylindrical volume Volume Two hemisphere volume in, r: The radius of the hemisphere. h: The height of the cylinder (excluding the hemisphere). Example 1 enter Radius = 5 units Height = 10 units Output Volume = 1570.8 cubic units explain Calculate volume using formula: Volume = π × r2 × h (4

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

Java is a popular programming language that can be learned by both beginners and experienced developers. This tutorial starts with basic concepts and progresses through advanced topics. After installing the Java Development Kit, you can practice programming by creating a simple "Hello, World!" program. After you understand the code, use the command prompt to compile and run the program, and "Hello, World!" will be output on the console. Learning Java starts your programming journey, and as your mastery deepens, you can create more complex applications.
