import java.security.NoSuchAlgorithmException;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESmiyao {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
getA221();
}
/**
* 自动生成AES128位密钥
*/
public static void getA221(){
try {
KeyGenerator kg = KeyGenerator.getInstance("AES");
kg.init(128);//要生成多少位,只需要修改这里即可128, 192或256
SecretKey sk = kg.generateKey();
byte[] b = sk.getEncoded();
String s = byteToHexString(b);
System.out.println(s);
System.out.println("十六进制密钥长度为"+s.length());
System.out.println("二进制密钥的长度为"+s.length()*4);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
System.out.println("没有此算法。");
}
}
/**
* 二进制byte[]转十六进制string
*/
public static String byteToHexString(byte[] bytes){
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String strHex=Integer.toHexString(bytes[i]);
if(strHex.length() > 3){
sb.append(strHex.substring(6));
} else {
if(strHex.length() < 2){
sb.append("0" + strHex);
} else {
sb.append(strHex);
}
}
}
return sb.toString();
}
/**
* 十六进制string转二进制byte[]
*/
public static byte[] hexStringToByte(String s) {
byte[] baKeyword = new byte[s.length() / 2];
for (int i = 0; i < baKeyword.length; i++) {
try {
baKeyword[i] = (byte) (0xff & Integer.parseInt(s.substring(i * 2, i * 2 + 2), 16));
} catch (Exception e) {
System.out.println("十六进制转byte发生错误!!!");
e.printStackTrace();
}
}
return baKeyword;
}
/**
* 使用对称密钥进行加密
*/
public static void getA231() throws Exception{
String keys = "c0e9fcff59ecc3b8b92939a1a2724a44"; //密钥
byte[] keyb = hexStringToByte(keys);
String mingwen = "hello word!"; //明文
SecretKeySpec sKeySpec = new SecretKeySpec(keyb, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, sKeySpec);
byte[] bjiamihou = cipher.doFinal(mingwen.getBytes());
System.out.println(byteToHexString(bjiamihou)); //加密后数据为ecf0a6bc80dbaf657eac9b06ecd92962
}
/**
* 使用对称密钥进行解密
*/
public static void getA232() throws Exception{
String keys = "c0e9fcff59ecc3b8b92939a1a2724a44"; //密钥
byte[] keyb = hexStringToByte(keys);
String sjiami = "ecf0a6bc80dbaf657eac9b06ecd92962"; //密文
byte[] miwen = hexStringToByte(sjiami);
SecretKeySpec sKeySpec = new SecretKeySpec(keyb, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, sKeySpec);
byte[] bjiemihou = cipher.doFinal(miwen);
System.out.println(new String(bjiemihou));
}
}
分享到:
相关推荐
此外,还应考虑密钥管理和安全传输的问题,例如使用密钥派生函数(KDF)和安全哈希算法(SHA)生成共享密钥,或者使用非对称加密算法(如RSA)来交换AES密钥。 总之,"C# IKVM 生成 java AES 密钥并加解密"涉及了跨...
遵循AES算法密钥扩展的要求,把读入的数据按密钥长度为128比特的情况进行扩展。 程序运行结果输出到KeyExp.txt文件的尾部,不能直接覆盖原有内容输出最后一个分组的W[0]-W[3],W[42]-W[43],每个分组一行,十六进制...
1. **秘钥生成**:允许用户生成符合AES标准的随机秘钥。 2. **加密**:使用用户提供的秘钥对数据进行加密,生成密文。 3. **解密**:使用相同的秘钥将密文还原为原始数据。 4. **秘钥管理**:安全地存储和管理秘钥,...
aes密钥扩展C语言实现 亲测可用放心下载
本篇文章将详细讲解如何在C#中生成256位AES密钥,并在Java 1.8.0_180及更高版本中进行加密和解密操作。 首先,我们需要理解AES的工作原理。AES采用块密码,将数据分块处理,标准的块大小为128位。对于256位密钥的...
这为本人编写,AES密钥加密算法,过程简单
总结一下,Java中实现AES密钥生成主要包括以下步骤: 1. 获取`KeyGenerator`实例,指定算法"AES"。 2. 初始化`KeyGenerator`,设置密钥长度(128、192或256位)。 3. 生成`SecretKey`对象,包含AES密钥。 4. 可选地...
《单向性策略与AES密钥生成算法的改进》这篇文章主要探讨了AES(高级加密标准)和Mars两种分组密码算法的密钥生成机制,并针对AES密钥设计中的不足提出了一种改进策略,旨在增强算法的安全性同时保持高效性。...
在JDK 8之前,由于美国出口管制法规的限制,Java默认只支持128位的AES密钥。如果想要在Java中使用更长的密钥,比如256位,就需要安装额外的不受限制的加密策略文件,这通常被称为“Unlimited Strength Jurisdiction ...
aes-finder, 在运行过程中,用于查找AES密钥的实用程序 AES查找器在运行进程内存中查找AES键的工具。 适用于 128,192和 256-bit 键。用法在 Visual Studio 2013中打开 aes-finder.sln 解决方案以编译源代码。 或者...
在`AES+RSA`的加密流程中,客户端首先生成一个随机的`AES`密钥,使用这个密钥对数据进行`AES`加密。然后,利用服务器的公钥,将`AES`密钥加密,发送给服务器。服务器收到加密的`AES`密钥后,用其私钥解密,从而获取...
用python实现AES的密钥扩展,对于算法的时候更简单,更容易理解!
1. 生成密钥:使用`KeyGenerator`类生成AES密钥。 2. 数据预处理:如果原始数据长度不是128位的倍数,需要填充至满足块大小。 3. 初始化向量(IV):对于某些模式,如CBC(Cipher Block Chaining),需要一个随机的...
**openssl密钥生成** 在IT安全领域,加密通信和数据保护是至关重要的。OpenSSL库是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现工具,同时也提供了用于生成各种加密密钥的命令行工具。在这个过程中,...
1. **密钥生成**:首先,你需要一个128位的密钥。这个密钥是加密和解密过程中唯一需要保密的部分。在JavaScript中,你可以使用`CryptoJS`库来生成或处理密钥。 2. **导入库**:微信小程序不直接支持AES加密,因此...
1. 密钥生成:如何生成AES密钥和MAC密钥。 2. 数据准备:如何将原始数据转化为适合AES加密的格式。 3. AES加密:使用AES算法对数据进行加密的步骤。 4. CMAC生成:利用AES生成MAC的具体步骤。 5. 验证:在接收端,...
在运行进程内存中查找 AES 密钥的实用程序。适用于 128、192 和 256 位密钥。 Usage: aes-finder { -1 } [-p pid | -n process-name | -f file] [/output/folder] 用法 要搜索 id = 123 的进程中的键,请执行以下...
这个"AES.rar"压缩包包含了一个关于AES加密的Delphi编程示例,主要涉及如何在Delphi程序中生成AES密钥和进行加密操作。 AES加密的核心在于它的分组密码结构,它将明文分成128位的数据块,然后用128、192或256位的...
`KeyGenerator.getInstance("AES")`创建一个AES密钥生成器,`kgen.init(128, new SecureRandom(password.getBytes()))`初始化生成器,其中128表示密钥长度,`SecureRandom`用于生成随机数,这里的`password.getBytes...
AES(Advanced Encryption Standard)是一种广泛使用的块加密算法,标准中定义了三种密钥长度:128位、192位和256位。在Java中,如果要使用超过128位的密钥进行AES加密,需要安装Java Cryptography Extension (JCE)...