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
分享到:
相关推荐
此外,还应考虑密钥管理和安全传输的问题,例如使用密钥派生函数(KDF)和安全哈希算法(SHA)生成共享密钥,或者使用非对称加密算法(如RSA)来交换AES密钥。 总之,"C# IKVM 生成 java AES 密钥并加解密"涉及了跨...
描述中提到的“JAVA写的简单文件加密解密程序”,表明这是一个Java应用程序,利用了Java的加密库来实现AES加密。在Java中,可以使用javax.crypto包下的类,如 Cipher 类来执行加密和解密操作。这个程序不需用户输入...
总结,通过C#生成256位AES密钥并使用相同的密钥和IV在Java中进行加密和解密,可以在两个平台间实现安全的数据交换。务必确保在两个环境中使用一致的加密模式、填充方式和IV,以确保跨平台的兼容性。在实际项目中,还...
2. **生成密钥**:AES支持多种密钥长度,如128位、192位和256位。选择合适的密钥长度,然后生成一个随机密钥。 3. **加密过程**:利用AES算法,将图片的二进制数据与密钥进行加密,生成密文。加密后的图片无法直接被...
在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...
本文将详细介绍 Android 使用 AES 加密和解密文件的实例代码,并对相关知识点进行详细的解释。 AES 加密算法 AES(Advanced Encryption Standard)是一种对称密钥块加密算法,是一种快速、安全的加密算法。AES ...
Java使用AES加密和解密需要注意密钥的生成、存储和使用,确保加密和解密的安全性。 AES加密算法的优点是: 1. 高度安全:AES加密算法的安全性非常高,难以被破解。 2. 快速性:AES加密算法的速度非常快,适合大...
在实际应用中,如文件加密,AES通常与模式如CBC(Cipher Block Chaining)、CFB(Cipher Feedback)或GCM(Galois/Counter Mode)结合使用,以提高安全性并处理数据流。这些模式处理连续数据块的方式不同,例如CBC...
这个文件可能包含了实现AES加密解密功能的源代码、示例、文档或其他相关资源,帮助开发者在Qt5应用程序中集成AES加密。 **总结** AES加密算法是现代加密的标准之一,常用于保护数据的安全。在Qt5开发中,可以方便...
Java中,虽然提供了BigInteger类来处理大整数,但AES加密解密通常使用Java的javax.crypto包,其中的Cipher类可以直接处理。然而,为了实现不依赖外部库的目标,我们需要手动实现AES的全部算法,这意味着需要将Cipher...
本文将详细介绍如何在 C# 中实现 AES 加密解密算法,并支持用户自定义密钥,从而提高加密强度,降低被破解的风险。 #### 关键概念解释 1. **对称加密**:加密和解密使用相同的密钥。 2. **AES**:一种对称加密算法...
8. 私钥解密AES密钥:接收方使用私钥对加密的AES密钥进行解密,恢复原始密钥,然后使用这个密钥解密AES加密的数据。 这个Java Demo的实现可能包含以下关键代码片段: - 使用`KeyGenerator.getInstance("AES")`生成...
在提供的"AesDemo"压缩包中,很可能包含了一个使用Qt实现的AES加密解密的示例程序。这个程序应当包含了上述知识点的具体应用,你可以通过阅读源代码、编译和运行来进一步理解和学习AES加密解密的实现细节。这个实战...
2. 创建AES加密器和解密器对象,通常使用CBC(Cipher Block Chaining)模式,因为它提供更好的安全性: ```cpp #include <cryptopp/aes.h> #include CryptoPP::AES::Encryption aesEncryption(key.data(), key....
总的来说,理解并正确使用Java实现AES加密和解密,需要注意秘钥的生成、工作模式的选择、填充方式以及字符编码的一致性,这样才能确保数据的安全传输和正确解密。通过实际操作和实践,你可以更深入地掌握这些知识点...
总结一下,AES加密解密算法在iOS和Android上的实现主要包括选择合适的加密算法、工作模式,设置密钥和初始化向量,以及执行加密解密操作。在实际应用中,我们还需要考虑到跨平台兼容性和安全性,使用可靠的库和最佳...
后端Java实现AES加密解密: 1. **导入依赖**:在Java中,我们需要添加Apache Commons Codec库来处理Base64编码,以及Java Cryptography Extension (JCE)来支持AES操作。确保JCE未受限制,因为默认情况下,Java对某些...
但同时,开发者也需要了解加密解密的基本原理,确保正确使用,并采取适当的措施保护密钥的安全,比如不将密钥硬编码在程序中,定期更换密钥,以及在传输时使用安全通道等。 总之,QT C++ AES字符串加密解密类库为...
在Delphi/Lazarus的AES加密解密源码中,可能包含了这些工作模式的实现,使得开发者可以根据实际需求选择合适的方式进行数据处理。 `AESCrypts.pas` 文件很可能是实现AES加密解密功能的核心源代码文件,其中可能包含...
自2001年被美国国家标准与技术研究院(NIST)发布以来,AES已成为对称密钥加密中最广泛使用的算法之一。AES的核心特点包括固定128位的块大小和128、192或256位的密钥大小。该算法具有高效、安全、灵活以及易于实现的...