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));
}
}
分享到:
相关推荐
C#使用IKVM 生成 java AES 密钥并实现加解密,需要引用bin目录下5个dll文件。
遵循AES算法密钥扩展的要求,把读入的数据按密钥长度为128比特的情况进行扩展。 程序运行结果输出到KeyExp.txt文件的尾部,不能直接覆盖原有内容输出最后一个分组的W[0]-W[3],W[42]-W[43],每个分组一行,十六进制...
aes密钥扩展C语言实现 亲测可用放心下载
这为本人编写,AES密钥加密算法,过程简单
使用cryptopp编写AES+RSA加解密算法,客户端生成AES密钥,然后用RSA加密后发到服务端解密
可以加密解密AES秘钥的工具
aes-finder, 在运行过程中,用于查找AES密钥的实用程序 AES查找器在运行进程内存中查找AES键的工具。 适用于 128,192和 256-bit 键。用法在 Visual Studio 2013中打开 aes-finder.sln 解决方案以编译源代码。 或者...
用python实现AES的密钥扩展,对于算法的时候更简单,更容易理解!
openssl密钥生成 一个密钥生成的软件,使用方法网上很容易找到。
主要介绍了java实现的AES秘钥生成算法,结合实例形式分析了AES秘钥生成算法原理与实现技巧,需要的朋友可以参考下
在运行进程内存中查找 AES 密钥的实用程序。适用于 128、192 和 256 位密钥。 Usage: aes-finder { -1 } [-p pid | -n process-name | -f file] [/output/folder] 用法 要搜索 id = 123 的进程中的键,请执行以下...
C#与JAVA调用密钥的格式不一样,需要转换,同时还提供了密钥生成功能
RSA的秘钥生成工具,可以自定义秘钥长度,非常好用,推荐给童鞋们
通过搜索密钥计划来搜索 AES 密钥。 能够找到 128、192 和 256 位密钥,例如 TrueCrypt 和 BitLocker 使用的密钥。 原本是为内存图像设计的,可以使用任意数据。
摘要:介绍了Mars和AES最终算法Rijndael的密钥生成算法。通过与 DES 比较, 分析了新一代分组密码的密钥生成算法的设计思路 。通过研究 AES 在
实现将明文上链加密存储、输入密钥加密查询
c++实现的AES加密,采取256位密钥。
实现对字符串(String)的AES加密与解密,支持128、192、256位密匙。里面包含详细的操作步骤、java源代码和需要用到的jar包。
AES的C++实现(128位密钥) 写了一个AES的C++实现,支持128位密钥,仅供参考。
实现aes对称加密字符串,支持CBC,FCB,ECB模式,密钥长度支持128,192,256位,例子实现了PKCS7填充模式