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

生成AES密钥,网摘自留

 
阅读更多


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 密钥并加解密

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

    AES密钥扩展(c实现)

    遵循AES算法密钥扩展的要求,把读入的数据按密钥长度为128比特的情况进行扩展。 程序运行结果输出到KeyExp.txt文件的尾部,不能直接覆盖原有内容输出最后一个分组的W[0]-W[3],W[42]-W[43],每个分组一行,十六进制...

    AES秘钥的工具

    1. **秘钥生成**:允许用户生成符合AES标准的随机秘钥。 2. **加密**:使用用户提供的秘钥对数据进行加密,生成密文。 3. **解密**:使用相同的秘钥将密文还原为原始数据。 4. **秘钥管理**:安全地存储和管理秘钥,...

    aes密钥扩展C语言实现

    aes密钥扩展C语言实现 亲测可用放心下载

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

    本篇文章将详细讲解如何在C#中生成256位AES密钥,并在Java 1.8.0_180及更高版本中进行加密和解密操作。 首先,我们需要理解AES的工作原理。AES采用块密码,将数据分块处理,标准的块大小为128位。对于256位密钥的...

    AES密钥加密算法

    这为本人编写,AES密钥加密算法,过程简单

    java实现的AES秘钥生成算法示例

    总结一下,Java中实现AES密钥生成主要包括以下步骤: 1. 获取`KeyGenerator`实例,指定算法"AES"。 2. 初始化`KeyGenerator`,设置密钥长度(128、192或256位)。 3. 生成`SecretKey`对象,包含AES密钥。 4. 可选地...

    单向性策略与AES密钥生成算法的改进_胡亮1

    《单向性策略与AES密钥生成算法的改进》这篇文章主要探讨了AES(高级加密标准)和Mars两种分组密码算法的密钥生成机制,并针对AES密钥设计中的不足提出了一种改进策略,旨在增强算法的安全性同时保持高效性。...

    支持32位密钥的AES加解密

    在JDK 8之前,由于美国出口管制法规的限制,Java默认只支持128位的AES密钥。如果想要在Java中使用更长的密钥,比如256位,就需要安装额外的不受限制的加密策略文件,这通常被称为“Unlimited Strength Jurisdiction ...

    aes-finder, 在运行过程中,用于查找AES密钥的实用程序.zip

    aes-finder, 在运行过程中,用于查找AES密钥的实用程序 AES查找器在运行进程内存中查找AES键的工具。 适用于 128,192和 256-bit 键。用法在 Visual Studio 2013中打开 aes-finder.sln 解决方案以编译源代码。 或者...

    AES+RSA加密客户端

    在`AES+RSA`的加密流程中,客户端首先生成一个随机的`AES`密钥,使用这个密钥对数据进行`AES`加密。然后,利用服务器的公钥,将`AES`密钥加密,发送给服务器。服务器收到加密的`AES`密钥后,用其私钥解密,从而获取...

    python实现AES密钥扩展

    用python实现AES的密钥扩展,对于算法的时候更简单,更容易理解!

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

    1. 生成密钥:使用`KeyGenerator`类生成AES密钥。 2. 数据预处理:如果原始数据长度不是128位的倍数,需要填充至满足块大小。 3. 初始化向量(IV):对于某些模式,如CBC(Cipher Block Chaining),需要一个随机的...

    openssl密钥生成

    **openssl密钥生成** 在IT安全领域,加密通信和数据保护是至关重要的。OpenSSL库是一个强大的安全套接层(SSL)和传输层安全(TLS)协议实现工具,同时也提供了用于生成各种加密密钥的命令行工具。在这个过程中,...

    微信小程序AESECB128加密实现.zip

    1. **密钥生成**:首先,你需要一个128位的密钥。这个密钥是加密和解密过程中唯一需要保密的部分。在JavaScript中,你可以使用`CryptoJS`库来生成或处理密钥。 2. **导入库**:微信小程序不直接支持AES加密,因此...

    AES加密算法以及MAC生成

    1. 密钥生成:如何生成AES密钥和MAC密钥。 2. 数据准备:如何将原始数据转化为适合AES加密的格式。 3. AES加密:使用AES算法对数据进行加密的步骤。 4. CMAC生成:利用AES生成MAC的具体步骤。 5. 验证:在接收端,...

    aesfinder.exe:在运行进程内存中查找 AES 密钥的实用程序。适用于 128、192 和 256 位密钥。

    在运行进程内存中查找 AES 密钥的实用程序。适用于 128、192 和 256 位密钥。 Usage: aes-finder { -1 } [-p pid | -n process-name | -f file] [/output/folder] 用法 要搜索 id = 123 的进程中的键,请执行以下...

    AES.rar_AES_AES加密示范_aes delphi_aes key 生成_delphi aes

    这个"AES.rar"压缩包包含了一个关于AES加密的Delphi编程示例,主要涉及如何在Delphi程序中生成AES密钥和进行加密操作。 AES加密的核心在于它的分组密码结构,它将明文分成128位的数据块,然后用128、192或256位的...

    Java实现AES加密和解密算法

    `KeyGenerator.getInstance("AES")`创建一个AES密钥生成器,`kgen.init(128, new SecureRandom(password.getBytes()))`初始化生成器,其中128表示密钥长度,`SecureRandom`用于生成随机数,这里的`password.getBytes...

    AES加密支持使用192、256位密匙

    AES(Advanced Encryption Standard)是一种广泛使用的块加密算法,标准中定义了三种密钥长度:128位、192位和256位。在Java中,如果要使用超过128位的密钥进行AES加密,需要安装Java Cryptography Extension (JCE)...

Global site tag (gtag.js) - Google Analytics