`
kavy
  • 浏览: 891310 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java实现AES256加解密

 
阅读更多

一.代码

package com.handler;
import java.io.UnsupportedEncodingException;
import java.security.Key; 
import java.security.Security;
import javax.crypto.Cipher; 
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey; 
import javax.crypto.spec.SecretKeySpec; 
 
public class AES256Encryption{ 
 
public static final String KEY_ALGORITHM="AES";          
 
public static final String CIPHER_ALGORITHM="AES/ECB/PKCS7Padding"; 
         
public static byte[] initkey() throws Exception{ 
     
     //实例化密钥生成器 
          Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
          KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC"); 
          kg.init(256); 
          kg.init(128);
     
          SecretKey secretKey=kg.generateKey(); 
   
          return secretKey.getEncoded();  
    }
 
public static byte[] initRootKey() throws Exception{ 
 
          return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
              0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
               0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
             0x06, 0x07, 0x09, 0x0d };
   
}
 
public static Key toKey(byte[] key) throws Exception{ 
 
SecretKey secretKey=new SecretKeySpec(key,KEY_ALGORITHM); 
           
return secretKey; 
    } 
         
public static byte[] encrypt(byte[] data,byte[] key) throws Exception{ 
    
   Key k=toKey(key); 
   Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
   Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC"); 
 
   cipher.init(Cipher.ENCRYPT_MODE, k); 
 
   return cipher.doFinal(data); 
    } 
 
public static byte[] decrypt(byte[] data,byte[] key) throws Exception{ 
 
        Key k =toKey(key); 
 
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC"); 
 
        cipher.init(Cipher.DECRYPT_MODE, k); 
 
        return cipher.doFinal(data); 
    } 
 
 
 
public static void main(String[] args) throws UnsupportedEncodingException{ 
         
         String str="芸sweet"; 
         
         //打印原文
         System.out.println("原文:"+str); 
 
         //密钥
         byte[] key;   
         
         try {
         
        //生成随机密钥 
             key = AES256Encryption.initkey(); 
            
             //打印密钥
             System.out.print("密钥:"); 
             for(int i = 0;i
                System.out.printf("%x", key[i]);
             }
             System.out.print("\n");
            
             //加密
             byte[] data=AES256Encryption.encrypt(str.getBytes(), key); 
           
             //打印密文
             System.out.print("加密后:");
          
             for(int i = 0;i
                System.out.printf("%x", data[i]);
             }
             System.out.print("\n");
            
             //解密密文
data=AES256Encryption.decrypt(data, key); 
//打印原文  
System.out.println("解密后:"+new String(data));
 
         } catch (Exception e) {
        
            e.printStackTrace();
        } 
            
       } 
}
 
二.注意
1.需要在工程中引入 bcprov-jdk15-133.jar
下载链接:http://pan.baidu.com/s/1dDBY9xB
2.替换\jre\lib\security下的local_policy.jar 和 US_export_policy.jar
下载链接:http://pan.baidu.com/s/1dDBY9xB
1)如果程序使用是系统jdk,则替换系统环境变量的jdk中\jre\lib\security下jar包。
2)如果程序是在MyEclipse中运行,则找到MyEclipse使用的jdk(方法:在MyEclipse里面进入window->Preferences->java选项里面有一个Installed JREs的选项,点击右边会出现一个列表,里面有你现在用到的JDK版本及路径),替换该jdk中\jre\lib\security下jar包。
可以解决:java.security.InvalidKeyException: Illegal key size or default parameters异常
 
三.如果密钥需要存入数据库,则需要对密钥进行base64编码,即将密钥(byte数组)通过base64编码转换成密钥(String类型);从数据库中读取密钥时,则使用base64解码,即将密钥(String类型)转换成密钥(byte数组)。详见《Java实现base64编码》

 

分享到:
评论

相关推荐

    Java实现AES加密和解密算法

    在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...

    JS实现AES-GCM加密,java实现AES-GCM解密。.md

    在工作中会经常遇到密码加密,URL传参要进行加密,在此我参照一个例子将用java实现的AES加解密程序用实例写出。JS实现AES-GCM加密,java实现AES-GCM解密

    Java实现的AES256加密解密功能示例

    以下是对Java实现AES256加密解密功能的详细解析: 1. **密钥生成**: 在提供的代码中,`initkey()` 方法使用`KeyGenerator`类生成AES256密钥。`KeyGenerator.getInstance(KEY_ALGORITHM, "BC")`初始化一个密钥生成...

    AES256加密及解密

    在Java中实现AES256加密和解密,通常会依赖一些库,如"Bouncy Castle"。"bcprov-jdk16-141.jar"是Bouncy Castle库的一个版本,它为Java提供了一套全面的加密算法,包括AES。Bouncy Castle库不仅支持标准的JCE(Java ...

    JAVA实现AES加密和解密

    本文将详细介绍如何使用Java实现AES的加密和解密过程,特别是针对16位长度的秘钥,并解决加解密过程中可能出现的乱码问题。 首先,AES加密算法有多种工作模式,如ECB(Electronic Codebook)、CBC(Cipher Block ...

    java aes128/256 对称加密解密,rsa对称加密解密验签实现

    java aes128/256 对称加密解密,rsa对称加密解密验签实现,php java通用aes加密 支持任何形式的aes加密,文件,字符,字节等,内含php代码,可以与php平台实现aes加密,而且包含rsa非对称加密签名验签实现,都是对...

    java的AES加密解密

    本篇将详细介绍Java实现AES加密解密的原理与实践。 AES是一种块密码,它以128位(16字节)的数据块作为处理单位,通过多次替换、置换等操作来实现加密。AES有三个关键参数:密钥长度(128、192或256位)、轮数(10...

    Java AES128加密解密

    在Java中实现AES128加密解密,通常会使用Java Cryptography Extension (JCE) 提供的API。AES支持三种工作模式:ECB(Electronic Codebook)、CBC(Cipher Block Chaining)和CFB(Cipher Feedback)。其中,ECB是最...

    Java AES256加密解密示例代码

    Java AES256加密解密示例代码 Java AES256加密解密示例代码主要介绍了Java AES256加密解密示例代码,通过示例代码对大家的学习或者工作具有一定的参考学习价值。 什么是 AES 256? 高级加密标准(英语:Advanced ...

    java 基于AES实现对文件的加密 解密

    在Java中,我们可以使用`javax.crypto`包来实现AES加密和解密。以下是实现这个功能的主要步骤: 1. **密钥生成**:首先,我们需要创建一个AES密钥。可以使用`KeyGenerator`类生成一个随机密钥。例如,对于128位的...

    java实现aes加密

    java实现aes加解密

    java 实现aes加解密算法

    本篇文章将详细介绍如何在Java中实现AES加解密,帮助你理解并掌握这一核心技术。 AES算法是在DES(Data Encryption Standard)的基础上发展起来的,具有更高的安全性,支持128位、192位和256位的密钥长度,而默认的...

    Aes256密码加密解密.rar

    在Java中,可以使用Java Cryptography Extension (JCE) 实现AES256的加密和解密。JCE提供了一系列接口和类,如`Cipher`、`SecretKeySpec`和` IvParameterSpec`,用于处理加密算法。首先,我们需要创建一个256位的...

    AES加密,解密 C# 生成JAVA 256长度密钥加密

    总结,通过C#生成256位AES密钥并使用相同的密钥和IV在Java中进行加密和解密,可以在两个平台间实现安全的数据交换。务必确保在两个环境中使用一致的加密模式、填充方式和IV,以确保跨平台的兼容性。在实际项目中,还...

    c/c++与java互通 AES加密解密

    本话题主要探讨如何在C/C++和Java之间使用基本的字符串和数组操作实现AES加密解密,而不依赖任何额外的加密库。 首先,我们来了解AES加密的基本原理。AES基于块密码,每个数据块为128位,支持128、192和256位的密钥...

    aes256加密解密

    这些库简化了开发者实现AES256加密和解密的流程。 "AES256Demo"可能是这个程序或工具的示例或演示版,可能包含一些代码示例或教程,展示如何使用AES256进行加密和解密操作。通过学习和理解这些示例,开发者或用户...

    java后台及前端js使用AES互相加解密及前端md5加密

    在Java中,可以使用`javax.crypto.Cipher`类和`java.security.SecureRandom`类来实现AES加解密。前端JavaScript也有相应的库,如CryptoJS,可以用于AES操作。 2. **Java后台AES加解密**:在Java中,首先需要创建一...

    Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes

    本资源"Delphi.rar_AES_AES加密_delphi AES加密_delphi 加解密_java delphi aes"提供的是在Delphi编程环境中实现AES加密和解密的示例代码,其目标是与Java平台上的加解密过程保持兼容。 首先,让我们深入了解一下...

    AES算法实现Java和JS互通加解密

    本主题将深入探讨如何在Java和JavaScript环境中实现AES加解密,并实现互通。 首先,AES的工作原理是基于块加密,它将明文数据分割成固定大小的块(128位),然后使用密钥对每个块进行加密。密钥长度可以是128、192...

    Java实现AES CBC PKCS7Padding加解密.docx

    在Java中实现AES(Advanced Encryption Standard)CBC(Cipher Block Chaining)模式的加解密,并且采用PKCS7Padding填充方式,通常是为了确保数据的安全传输和存储。在Java标准库中,虽然内置了AES和PKCS5Padding的...

Global site tag (gtag.js) - Google Analytics