zoukankan      html  css  js  c++  java
  • AES 加密 解密

    package com.example.myFirstProject;
    
    import java.security.SecureRandom;
    
    import javax.crypto.Cipher;
    import javax.crypto.KeyGenerator;
    import javax.crypto.SecretKey;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AesTest {
            /**
            * AES加密字符串
            * 
            * @param content
            * 需要被加密的字符串
            * @param password
            * 加密需要的密码
            * @return 密文
            */
            public static byte[] encrypt(String content, String password) {
            try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
        
            kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始化出
            // 128位的key生产者
            //加密没关系,SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行
        
            SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
        
            byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥,如果此密钥不支持编码,则返回
            // null。
        
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为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 (Exception e) {
            return null;
            }
        }
            
        //////////////////////////////////////////////////////////////////////
            
            /**
             * 解密AES加密过的字符串
             * 
             * @param content
             *            AES加密过过的内容
             * @param password
             *            加密时的密码
             * @return 明文
             */
            public static byte[] decrypt(byte[] content, String password) {
                try {
                    KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
                    kgen.init(128, new SecureRandom(password.getBytes()));
                    SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
                    byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥
                    SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥
                    Cipher cipher = Cipher.getInstance("AES");// 创建密码器
                    cipher.init(Cipher.DECRYPT_MODE, key);// 初始化为解密模式的密码器
                    byte[] result = cipher.doFinal(content);  
                    return result; // 明文   
    
                } catch (Exception e) {
                    
                }
                return null;
            }
            
            
            ////////////////////////////////////////////////////////////
            public static void main(String[] args) {
                String content = "美女,约吗?";
                String password = "123";
                System.out.println("加密之前:" + content);
    
                // 加密
                byte[] encrypt = AesTest.encrypt(content, password);
                System.out.println("加密后的内容:" + new String(encrypt));
    
                // 解密
                byte[] decrypt = AesTest.decrypt(encrypt, password);
                System.out.println("解密后的内容:" + new String(decrypt));        
            }
            
    }
  • 相关阅读:
    Ubuntu的shell之bash和dash
    Linux下烧写工具DNW和USB驱动安装(一)
    make -C M=
    uname -r和uname -a了解
    如何添加Samba用户
    Ubuntu下配置samba实现文件夹共享
    [Jenkins]运行shell报错:寻找匹配的 `"' 是遇到了未预期的文件结束符
    [Shell] 调试shell脚本的技巧 | 校验shell脚本语法 |寻找匹配的 `"' 是遇到了未预期的文件结束符
    [Python]通过python-jenkins操作jenkins slave启动job | 通过python-jenkins实现ios自动化打包接口
    pod: command not found
  • 原文地址:https://www.cnblogs.com/zygyun/p/8931391.html
Copyright © 2011-2022 走看看