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

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

阅读更多
/**
	 * 自动生成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 密钥并加解密"涉及了跨...

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

    1. 密钥生成:使用KeyGenerator创建随机密钥,如AESKeySpec。 2. 初始化Cipher对象:根据选择的加密模式(如CBC模式)和填充模式(如PKCS5Padding)设置Cipher。 3. 加密:使用Cipher的`doFinal()`方法处理文件内容...

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

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

    本地图片AES加密解密

    "本地图片AES加密解密"是一个针对这个问题提出的技术方案,旨在保护存储在本地设备上的图片不被未经授权的第三方访问。AES(Advanced Encryption Standard)加密是一种广泛应用的对称加密算法,因其高效和安全性而...

    Java实现AES加密和解密算法

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

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

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

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

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

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

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

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

    1. 密钥和IV的生成:在C/C++和Java中,使用相同的随机数生成器来创建密钥和IV。 2. 密钥和IV的序列化:将它们转换为字节数组并保存,确保字节顺序一致。 3. 加密:在C/C++和Java中实现AES加密算法,处理输入的明文...

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

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

    C#实现AES加密解密算法

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

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

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

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

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

    Qt实现AES加密解密

    1. **AES加密算法**: AES有三种不同的密钥长度,即128位(AES_128)、192位(AES_192)和256位(AES_256)。这些长度的选择直接影响到加密的安全性与计算复杂度。128位是默认和最常用的,适合大多数场景;192和256位则提供...

    Qt实现AES加密和解密

    AES是一种广泛使用的对称加密算法,它基于块密码,使用相同的密钥进行加密和解密。AES的块大小为128位,支持128、192和256位的密钥长度,提供了高安全性和快速的加密速度。 要实现在Qt中使用AES,可以借助第三方库...

    JAVA实现AES加密和解密

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

    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加密解密功能的核心源代码文件,其中可能包含...

    MFC实现AES非对称加密解密算法

    4. **密钥加密**:使用公钥加密生成的AES密钥。这一步是关键,因为AES密钥不会被直接发送,而是用公钥加密后传输,保证了密钥的安全。 5. **数据传输**:将加密后的AES密钥和AES加密的数据一起发送给接收方。 6. *...

Global site tag (gtag.js) - Google Analytics