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));        
            }
            
    }
  • 相关阅读:
    Scrapy 扩展中间件: 针对特定响应状态码,使用代理重新请求
    Scrapy 扩展中间件: 同步/异步提交批量 item 到 MySQL
    Scrapy 隐含 bug: 强制关闭爬虫后从 requests.queue 读取的已保存 request 数量可能有误
    Scrapyd 改进第二步: Web Interface 添加 STOP 和 START 超链接, 一键调用 Scrapyd API
    简单示例理解神闭包
    ejs 模板使用方法
    我使用的开源组件汇总,以备学习使用
    了不起的Node.js--之五 TCP连接
    Windows7下Java运行时环境搭建
    了不起的Node.js--之四
  • 原文地址:https://www.cnblogs.com/zygyun/p/8931391.html
Copyright © 2011-2022 走看看