`
sunting_bcwl
  • 浏览: 95272 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AES算法Java实现(转)

    博客分类:
  • Java
阅读更多
package com.tristan.aes;

import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

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

/**
* @author 【轰隆隆】
*
*/
public class AES {

/**
* AES加密算法
*/
public AES() {
}

/**
* 加密
*
* @param content
*            需要加密的内容
* @param keyWord
*            加密密钥
* @return byte[] 加密后的字节数组
*/
public static byte[] encrypt(String content, String keyWord) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyWord.getBytes());
kgen.init(128, secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "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 (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}

/**
* @param content
*            需要加密的内容
* @param password
*            加密密钥
* @return String 加密后的字符串
*/
public static String encrypttoStr(String content, String password) {
return parseByte2HexStr(encrypt(content, password));
}

/**
* 解密
*
* @param content
*            待解密内容
* @param keyWord
*            解密密钥
* @return byte[]
*/
public static byte[] decrypt(byte[] content, String keyWord) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(keyWord.getBytes());
kgen.init(128, secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} 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 null;
}

/**
* @param content
*            待解密内容(字符串)
* @param keyWord
*            解密密钥
* @return byte[]
*/
public static byte[] decrypt(String content, String keyWord) {
return decrypt(parseHexStr2Byte(content), keyWord);
}

/**
* 将二进制转换成16进制
*
* @param buf
* @return String
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}

/**
* 将16进制转换为二进制
*
* @param hexStr
* @return byte[]
*/
public static byte[] parseHexStr2Byte(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;
}

public static void main(String[] args) {
String content = "HongLongLong";
String Key = "http://www.honglonglong.com";

// 加密
System.out.println("加密前:" + content);
String encryptResult = encrypttoStr(content, Key);
System.out.println("加密后:" + encryptResult);
// 解密
byte[] decryptResult = decrypt(encryptResult, Key);
System.out.println("解密后:" + new String(decryptResult));
}
}
分享到:
评论

相关推荐

    AES算法Java实现

    以上就是关于“AES算法Java实现”的核心知识点,包括AES的基本原理、Java中的实现方式、加密过程、不同模式的选择以及安全注意事项。这些内容可以帮助你构建一个基本的AES加密解密工具,并理解其背后的机制。

    AES算法java实现

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,...以上就是关于“AES算法java实现”的主要知识点,具体实现细节可能会因具体代码而异。通过这些知识,你可以理解并创建自己的AES加密和解密功能。

    AES加密算法(java)实现

    这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。

    AES算法Java实现对文件加密

    在Java中实现AES算法,主要涉及到`javax.crypto`和`java.security`这两个核心包。首先,我们需要创建一个密钥,这通常包括生成密钥对(公钥和私钥)或随机生成密钥。在AES中,我们只用到一个密钥,因为它是对称加密...

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

    在IT行业中,尤其是在Web开发中,AES算法常用于确保数据在传输过程中的安全性,例如在客户端(JavaScript)与服务器端(Java)之间的通信。本主题将深入探讨如何在Java和JavaScript环境中实现AES加解密,并实现互通...

    AES算法java代码

    以上就是AES算法在Java中的实现细节。在使用AES时,需要注意安全性问题,如密钥的管理和存储,以及防止密码重放攻击。同时,确保在不同平台间进行加密解密时使用相同的工作模式和填充方式,以保证兼容性。

    密码学AES算法(JAVA版本)

    2. **Java实现AES算法**:通过Java编程语言实现AES算法的具体方法与步骤。 3. **AES算法的原理**:包括密钥扩展、加解密过程等核心概念。 4. **Java中的加密技术**:介绍Java中支持加密的相关库和技术。 5. **AES...

    带界面的AES算法Java实现.docx

    "Java实现的AES算法带界面设计" 本文档将详细介绍如何使用Java语言实现AES加密算法,并设计一个带界面的加密解密工具。下面是本文档的详细知识点: 1. AES加密算法的基本原理 AES(Advanced Encryption Standard...

    带界面的AES算法Java实现.doc

    带界面的AES算法Java实现.doc

    Java实现AES加密算法

    Java实现AES加密算法Java实现AES加密算法

    AES加密算法的JAVA实现

    AES算法有三种不同的密钥长度:128位、192位和256位,每种密钥长度对应的加密轮数不同,分别是10轮、12轮和14轮。加密过程主要包括四个基本操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)...

    Java实现AES加密和解密算法

    在给定的代码示例中,AES算法被用于加密和解密字符串数据。 首先,了解AES加密的基本步骤: 1. **密钥生成**:AES加密需要一个密钥作为输入。在Java中,可以使用`KeyGenerator`类来生成密钥。`KeyGenerator....

    Java实现的对称加密算法AES定义与用法详解

    "Java实现的对称加密算法AES定义与用法详解" 对称加密算法AES是当前使用最多的加密算法之一,其主要特点是高级的、安全的、快速的和灵活的。下面我们将详细介绍Java实现的对称加密算法AES的定义、特点、用法及使用...

    带界面的AES算法Java实现.pdf

    【Java实现AES】 在Java中,AES的实现主要依赖于`javax.crypto`包中的类和接口。核心类包括`Cipher`用于加解密操作,`SecretKeySpec`用于创建密钥,以及`KeyGenerator`用于生成密钥。以下是一些关键步骤: 1. **...

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

    // 使用AES算法,ECB模式,PKCS5填充 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); ``` 这里`plaintext`是待加密的明文字符串。 3. **解密过程*...

    JAVA实现AES加密算法代码.doc

    JAVA 实现 AES 加密算法代码 JAVA 实现 AES 加密算法代码是指使用 JAVA 语言来实现高级加密标准(Advanced Encryption Standard,AES)的加密算法。AES 已经变成目前对称加密中最流行算法之一,能够使用 128、192 ...

    AES加密算法java实现及实验报告

    1. **实验目的**:理解AES加密算法的基本原理,掌握Java实现AES加密的步骤。 2. **实验环境**:列出所使用的开发工具、Java版本等信息。 3. **实验步骤**:详细描述如何生成密钥、加密和解密过程,以及代码实现。 4....

    AES.rar_AES_AES加密 java_AES算法_aes java_java aes

    **AES算法详解** AES,全称为“Advanced Encryption Standard”,即高级加密标准,是目前广泛使用的对称加密算法。它在2001年由NIST(美国国家标准与技术研究所)正式采纳,取代了之前的DES(数据加密标准)成为新...

    Aes算法设计java实现.txt

    Aes算法设计java实现.txt

    java实现复杂的AES算法 源码

    在Java中实现AES算法,可以用于保护数据的隐私,例如在传输或存储敏感信息时。本篇文章将深入探讨如何在Java中实现AES加密和解密的源码,并解析其工作原理。 首先,AES的核心是128位的块操作,它使用相同的密钥进行...

Global site tag (gtag.js) - Google Analytics