`
yaodaqing
  • 浏览: 349322 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

自动生成AES密钥,并使用生成的进行加密解密2

阅读更多
package com.digican.books.a0102.b0101;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
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;
import javax.crypto.spec.SecretKeySpec;

/**
 * 2010年9月1日
 * @author 姚大庆
 */
public class DigicanAES {
	
	public static void main(String[] args) throws Exception {
		//加密
		/*byte[] text = "hello world".getBytes();
		byte[] b = getAESEncode("d:\\testAES",text);
		FileOutputStream fos = new FileOutputStream("d:\\testAESjiamji");
		fos.write(b);
		fos.flush();
		fos.close();*/
		
		//解密
		/*File file = new File("d:\\testAESjiamji");
		byte[] bm = new byte[(int) file.length()];
		FileInputStream fis = new FileInputStream(file);
		fis.read(bm);
		byte[] b = getAESDecode("d:\\testAES", bm);
		System.out.println(new String(b));*/
	}

	/**
	 * 生成密钥
	 * 自动生成AES128位密钥
	 * 传入保存密钥文件路径
	 * filePath 表示文件存储路径加文件名;例如d:\aes.txt
	 * @throws NoSuchAlgorithmException 
	 * @throws IOException 
	 */
	public static void getAutoCreateAESKey(String filePath) throws NoSuchAlgorithmException, IOException{
		KeyGenerator kg = KeyGenerator.getInstance("AES");
		kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256
		SecretKey sk = kg.generateKey();
		byte[] b = sk.getEncoded();
		FileOutputStream fos = new FileOutputStream(filePath);
		fos.write(b);
		fos.flush();
		fos.close();
	}
	
	/**
	 * 加密
	 * 使用对称密钥进行加密
	 * keyFilePath 密钥存放路径
	 * text 要加密的字节数组
	 * 加密后返回一个字节数组
	 * @throws IOException 
	 * @throws NoSuchPaddingException 
	 * @throws NoSuchAlgorithmException 
	 * @throws InvalidKeyException 
	 * @throws BadPaddingException 
	 * @throws IllegalBlockSizeException 
	 */
	public static byte[] getAESEncode(String keyFilePath,byte[] text) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		File file = new File(keyFilePath);
		byte[] key = new byte[(int) file.length()];
		FileInputStream fis = new FileInputStream(file);
		fis.read(key);
		SecretKeySpec sKeySpec = new SecretKeySpec(key, "AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.ENCRYPT_MODE, sKeySpec);
		byte[] bjiamihou = cipher.doFinal(text);
		return bjiamihou;
	}
	
	/**
	 * 解密
	 * 使用对称密钥进行解密
	 * keyFilePath 密钥存放路径
	 * text 要解密的字节数组
	 * 解密后返回一个字节数组
	 * @throws IOException 
	 * @throws NoSuchPaddingException 
	 * @throws NoSuchAlgorithmException 
	 * @throws InvalidKeyException 
	 * @throws BadPaddingException 
	 * @throws IllegalBlockSizeException 
	 */
	public static byte[] getAESDecode(String keyFilePath,byte[] text) throws IOException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException{
		File file = new File(keyFilePath);
		byte[] key = new byte[(int) file.length()];
		FileInputStream fis = new FileInputStream(file);
		fis.read(key);
		SecretKeySpec sKeySpec = new SecretKeySpec(key, "AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, sKeySpec);
		byte[] bjiemihou = cipher.doFinal(text);
		return bjiemihou;
	}
}


//解密C语言的AES加密后数据,要把JAVA中的AES改成AES/ECB/NoPadding
分享到:
评论

相关推荐

    C# IKVM 生成 java AES 密钥并加解密

    此外,还应考虑密钥管理和安全传输的问题,例如使用密钥派生函数(KDF)和安全哈希算法(SHA)生成共享密钥,或者使用非对称加密算法(如RSA)来交换AES密钥。 总之,"C# IKVM 生成 java AES 密钥并加解密"涉及了跨...

    128位AES算法对文件进行加密解密(秘钥库自动生成的秘钥来加密)

    描述中提到的“JAVA写的简单文件加密解密程序”,表明这是一个Java应用程序,利用了Java的加密库来实现AES加密。在Java中,可以使用javax.crypto包下的类,如 Cipher 类来执行加密和解密操作。这个程序不需用户输入...

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

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

    本地图片AES加密解密

    2. **生成密钥**:AES支持多种密钥长度,如128位、192位和256位。选择合适的密钥长度,然后生成一个随机密钥。 3. **加密过程**:利用AES算法,将图片的二进制数据与密钥进行加密,生成密文。加密后的图片无法直接被...

    Java实现AES加密和解密算法

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

    android使用AES加密和解密文件实例代码

    本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并对相关知识点进行详细的解释。 AES 加密算法 AES(Advanced Encryption Standard)是一种对称密钥块加密算法,是一种快速、安全的加密算法。AES ...

    Java使用AES加密和解密的实例详解

    Java使用AES加密和解密需要注意密钥的生成、存储和使用,确保加密和解密的安全性。 AES加密算法的优点是: 1. 高度安全:AES加密算法的安全性非常高,难以被破解。 2. 快速性:AES加密算法的速度非常快,适合大...

    用aes算法对任意长度数据进行加密解密

    在实际应用中,如文件加密,AES通常与模式如CBC(Cipher Block Chaining)、CFB(Cipher Feedback)或GCM(Galois/Counter Mode)结合使用,以提高安全性并处理数据流。这些模式处理连续数据块的方式不同,例如CBC...

    qt5AES加密,ES加密/解密算法是一种可逆的对称加密算法,这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推

    这个文件可能包含了实现AES加密解密功能的源代码、示例、文档或其他相关资源,帮助开发者在Qt5应用程序中集成AES加密。 **总结** AES加密算法是现代加密的标准之一,常用于保护数据的安全。在Qt5开发中,可以方便...

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

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

    C#实现AES加密解密算法

    本文将详细介绍如何在 C# 中实现 AES 加密解密算法,并支持用户自定义密钥,从而提高加密强度,降低被破解的风险。 #### 关键概念解释 1. **对称加密**:加密和解密使用相同的密钥。 2. **AES**:一种对称加密算法...

    AES算法的javademo(秘钥采用RSA公私钥加解密)

    8. 私钥解密AES密钥:接收方使用私钥对加密的AES密钥进行解密,恢复原始密钥,然后使用这个密钥解密AES加密的数据。 这个Java Demo的实现可能包含以下关键代码片段: - 使用`KeyGenerator.getInstance("AES")`生成...

    Qt实现AES加密解密

    在提供的"AesDemo"压缩包中,很可能包含了一个使用Qt实现的AES加密解密的示例程序。这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战...

    Qt实现AES加密和解密

    2. 创建AES加密器和解密器对象,通常使用CBC(Cipher Block Chaining)模式,因为它提供更好的安全性: ```cpp #include <cryptopp/aes.h> #include CryptoPP::AES::Encryption aesEncryption(key.data(), key....

    JAVA实现AES加密和解密

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

    AES加密解密算法 iOS和Android完美实现

    总结一下,AES加密解密算法在iOS和Android上的实现主要包括选择合适的加密算法、工作模式,设置密钥和初始化向量,以及执行加密解密操作。在实际应用中,我们还需要考虑到跨平台兼容性和安全性,使用可靠的库和最佳...

    AES实现前端JS和后端java加密解密

    后端Java实现AES加密解密: 1. **导入依赖**:在Java中,我们需要添加Apache Commons Codec库来处理Base64编码,以及Java Cryptography Extension (JCE)来支持AES操作。确保JCE未受限制,因为默认情况下,Java对某些...

    QT C++ AES字符串加密解密类库,引入即可使用

    但同时,开发者也需要了解加密解密的基本原理,确保正确使用,并采取适当的措施保护密钥的安全,比如不将密钥硬编码在程序中,定期更换密钥,以及在传输时使用安全通道等。 总之,QT C++ AES字符串加密解密类库为...

    Delphi版AES加密解密模块源码,支持128位、192位、256位密钥

    在Delphi/Lazarus的AES加密解密源码中,可能包含了这些工作模式的实现,使得开发者可以根据实际需求选择合适的方式进行数据处理。 `AESCrypts.pas` 文件很可能是实现AES加密解密功能的核心源代码文件,其中可能包含...

    AES加密解密实验报告

    自2001年被美国国家标准与技术研究院(NIST)发布以来,AES已成为对称密钥加密中最广泛使用的算法之一。AES的核心特点包括固定128位的块大小和128、192或256位的密钥大小。该算法具有高效、安全、灵活以及易于实现的...

Global site tag (gtag.js) - Google Analytics