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

JAVA 的 AES 加密方式使用

    博客分类:
  • Java
阅读更多

简单的AES加密,废话不多说,直接代码

=============================

package cn.enc;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;

/**
 *
 * %Encrtry%。
 * <p>%类的简介%。</p>
 *
 * @author arron.huang
 * @version v1.0.0
 * <p><B>last update </B> by arron.huang @ 2011-9-7</p>
 * @since v1.0.0
 */
public class Encrtry {

 /**
  * 加密参数
  */
 public final static int enc = Cipher.ENCRYPT_MODE;
 /**
  * 解密码参数
  */
 public final static int dec = Cipher.DECRYPT_MODE;
 
 public static void main(String[] args) throws Exception{

  String message = "欢迎来到我的AES加密基地";
  String fileName = "aaa.dat";
  
  System.out.println("需要机密数据>>>>>>>>>" + message);
  
  String enc_String = sign(message, fileName,  enc);
  System.out.println("加密后可以显示数据>>>>>"+enc_String+"<<<<<");
  System.out.println("机密后长度>>>>>>>>>>>>>" + enc_String.length() + "<<<<<<<<<<<<<<<<");
  
  String dec_String = sign(enc_String, fileName, dec);
  
  System.out.println("解密后数据>>>>" + dec_String + "<<<<<<<<");
  
 }
 
 /**
  *
  * %加密message 返回加密后数据(注:句号不能删除,本注应删除)%。
  * <p>%传入message 返回message机密后数据,使用AES加密方式,(简单方法可不必详述)%。</p>
  * @param message  需要加密或者解密数据字符串
  * @param encType
  * @return String 根据不同encType 加密解密,返回可能是加密后数据,或者解密后数据
  */
 public static String sign(String message, String file, int encType) {
  String sign = "";
  Key key = null;
  if(null == message || "".equals(message)) {
   return sign;
  }
  try {
   FileInputStream inputStream = new FileInputStream("encrtry.k8");
   ObjectInputStream ois = new ObjectInputStream(inputStream);
   key = (Key) ois.readObject();
   ois.close();
   inputStream.close();
  } catch (FileNotFoundException e) {
   System.out.println("加密文件未找到");
  } catch (IOException e) {
   e.printStackTrace();
   System.out.println("流读取出错");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
   System.out.println("类转换错误,读取Key文件错误");
  }
  
   try {
   Cipher cipher = Cipher.getInstance("AES");
   cipher.init(encType, key);
   switch (encType) {
   case Cipher.ENCRYPT_MODE:
    byte [] bytes = cipher.doFinal(message.getBytes());
    sign = outputStream(bytes, file);
    break;
   case Cipher.DECRYPT_MODE:
    byte [] bys = inputStream(file);
    sign = new String(cipher.doFinal(bys));
    break;
   default:
    break;
   }
  } 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 sign;
 }
 
 /**
  *
  * %字节数据保存到临时文件中(注:句号不能删除,本注应删除)%。
  * <p>%方法详述(简单方法可不必详述)%。</p>
  * @param bytes 读取字符
  * @param file 临时保存文件路径包括文件名
  * @return
  */
 private static String outputStream(byte [] bytes, String file) {
  try {
   FileOutputStream outputStream = new FileOutputStream(file);
   outputStream.write(bytes);
   outputStream.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return parseBytes2Hex(bytes);
 }
 
 private static byte [] inputStream(String file) {
  byte [] sr = null;
  try {
   FileInputStream inputStream = new FileInputStream(file);
   sr = new byte [inputStream.available()];
   int totle = 0;
   int len = inputStream.read(sr);
   while(len > 0) {
    totle += len;
    len = inputStream.read(sr, totle, sr.length - totle);
   }
   inputStream.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return sr;
 }
 
 /**
  *
  * %产生唯一钥匙(注:句号不能删除,本注应删除)%。
  * <p>%通过AES方式产生一把以后需要使用的钥匙,只需要调用一次(简单方法可不必详述)%。</p>
  *
  * @param String file 文件地址
  *
  */
 private static void encrtry(String fila) {
  try {
   Cipher cipher = Cipher.getInstance("AES");
   SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();

   FileOutputStream fileOutput = new FileOutputStream("encrtry.k8");
   ObjectOutputStream obj = new ObjectOutputStream(fileOutput);
   
   obj.writeObject(secretKey);
   
   obj.close();
   fileOutput.close();
   
   cipher.init(Cipher.ENCRYPT_MODE, secretKey);
   byte [] bytes = cipher.doFinal("12324".getBytes());
   System.out.println(new String(bytes));
   
   cipher.init(Cipher.DECRYPT_MODE, secretKey);
   System.out.println(new String(cipher.doFinal(bytes)));
   
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
    /**将16进制转换为二进制
     * @param hexStr
     * @return
     */
    private static byte[] parseHex2Bytes(String hexStr) {
            if (hexStr.length() < 1)
                    return null;
            byte[] result = new byte[hexStr.length()/2];
            for (int i = 0;i< hexStr.length()/2; i++) {
                    int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);
                    int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);
                    result[i] = (byte) (high * 16 + low);
            }
            return result;
    }
 
   
    /**
     * 将二进制转换成16进制
     * @param buf
     * @return
     */
    private static String parseBytes2Hex(byte bys[]) {
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < bys.length; i++) {
                    String hex = Integer.toHexString(bys[i] & 0xFF);
                    if (hex.length() == 1) {
                            hex = '0' + hex;
                    }
                    sb.append(hex.toUpperCase());
            }
            return sb.toString();
    }
   
}

 

====================测试输出结果=================

需要机密数据>>>>>>>>>欢迎来到我的AES加密基地
加密后可以显示数据>>>>>3C48399D64D3388D0348262ECC45AE27BFB010FF77712088FE05A92A7282477B<<<<<
加密后长度>>>>>>>>>>>>>64<<<<<<<<<<<<<<<<
解密后数据>>>>欢迎来到我的AES加密基地<<<<<<<<

分享到:
评论

相关推荐

    java AES加密 解决加密过长非法异常问题

    在提供的两个文件`AES加密1.java`和`AES加密2.java`中,可能包含了上述两种方式的实现。它们可能涵盖了密钥生成、初始化向量(IV)的使用、不同加密模式的选择以及如何处理加密过程中可能遇到的异常。通过阅读和理解...

    AES加密.rar java Aes加密方式

    Java平台提供了丰富的库支持AES加密,使得开发人员可以方便地在Java应用程序中集成这种强大的加密技术。 在Java中实现AES加密,主要涉及到以下几个关键步骤和知识点: 1. 密钥生成:AES加密需要一个密钥来执行加...

    java aes加密转换Base64 使用 CBC 解密模式

    java AES加密解密,使用 CBC 解密模式,EncryptByAes Aes加密 后 base64 再加 DecryptByAes Aes 解密,对 PKCS7 填充的数据进行反填充,对数据进行 PKCS7 填充 使用 CBC 解密模式, // aesDecrypt 解密 public ...

    java代码-java使用AES加密解密 AES-128-ECB加密

    java代码-java使用AES加密解密 AES-128-ECB加密 ——学习参考资料:仅用于个人学习使用

    Java AES加密Java AES加密Java AES加密Java AES加密

    Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密Java AES加密

    JAVA实现AES加密和解密

    总的来说,理解并正确使用Java实现AES加密和解密,需要注意秘钥的生成、工作模式的选择、填充方式以及字符编码的一致性,这样才能确保数据的安全传输和正确解密。通过实际操作和实践,你可以更深入地掌握这些知识点...

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

    Java中的AES加密同样有多种工作模式可供选择,并且JCE也提供了易于使用的API来实现这些操作。为了实现Delphi和Java之间的兼容性,开发者需要确保两者的加密参数(如密钥、初始向量IV、工作模式等)一致,并且遵循...

    java实现aes加密

    java实现aes加解密

    AES加密算法(java实现).zip_aes java_cmM0 解密_java aes加密 demo_js aes加密算法_

    这个压缩包文件可能包含了Java实现AES加密和解密的代码示例,适合初学者了解和学习AES加密的基本使用。由于描述中提到"有些许不足,谨慎下载",可能意味着示例代码可能存在一些问题或者不完善的地方,需要用户自行...

    Java实现AES加密和解密算法

    在Java中实现AES(Advanced Encryption Standard)...总之,Java中的AES加密和解密涉及到密钥生成、密码器的使用以及数据的转换。在实现过程中,还需要考虑安全性、性能和兼容性等问题,确保加密算法的有效性和安全性。

    c AES, c++ AES, java AES, 互通, 加密解密

    Java中,虽然提供了BigInteger类来处理大整数,但AES加密解密通常使用Java的javax.crypto包,其中的Cipher类可以直接处理。然而,为了实现不依赖外部库的目标,我们需要手动实现AES的全部算法,这意味着需要将Cipher...

    java .net AES加密不兼容问题:

    例如,Java的`javax.crypto.Cipher`类和.NET的`System.Security.Cryptography.Aes`类提供了AES加密的功能。Java的`Cipher`类默认使用PKCS5Padding填充模式,而.NET的`Aes`类默认使用PKCS7Padding(两者在填充方式上...

    java使用Hex编码解码实现Aes加密解密功能示例

    总结来说,这个Java示例展示了如何使用Hex编码和解码配合AES加密算法进行数据安全保护。在实际应用中,为了提高安全性,通常会采用更复杂的加密模式(如CBC或CFB),并使用随机生成的密钥,而不是固定或硬编码的密钥...

    AES.rar_AES_AES加密 java_AES算法_aes java_java aes

    AES加密过程** - **字节代换**:这是非线性的一步,每个字节通过一个固定的查找表进行替换,使得明文数据的初始模式发生改变。 - **行移位**:将128位的矩阵按行进行循环左移,不同轮的移动位数不同,增加了混淆...

    java使用AES加密/解密文件

    本教程将详细讲解如何在Java中使用AES加密和解密文件,以确保数据的安全性。 AES全称为Advanced Encryption Standard,是一种对称加密算法,它在信息安全领域中被广泛应用,因为其速度快、效率高且安全性强。Java...

    AES加密算法(java)实现

    AES高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。

    4.nodejs和java的AES加密结果保持一致.doc

    这是因为 Java 中的 AES 加密算法需要使用 MD5 加密后的密钥。 Node.js 和 Java 之间的 AES 加密结果保持一致 为了使 Node.js 和 Java 之间的 AES 加密结果保持一致,需要确保使用相同的加密算法和密钥。在 Node....

    Java AES128加密解密

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

    Java AES DES加密算法的坑

    总结来说,理解和正确使用Java中的AES和DES加密算法,需要考虑密钥管理、初始化向量、填充模式、编码以及错误处理等多个方面,同时要关注加密过程中的安全风险和潜在陷阱。在实践中,结合合适的加密库和最佳实践,...

    java前后端通讯AES加密及解密样例

    在提供的"demo"文件中,可能包含了具体的项目结构、配置文件、源代码等,这些内容可以帮助进一步理解和实现这个Java前后端通讯AES加密及解密的案例。实际操作时,需要根据文件内容进行相应的集成和调试。

Global site tag (gtag.js) - Google Analytics