`

有固定的密钥key的AES加密

 
阅读更多

package test;

/*****************************************************
*
* @author wuzhenzhong
*
* @since May 12, 2009
*
*****************************************************/
import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

public class EncryptSample {

public static void main(String[] args) throws Exception {
/*
* 256 bit key
*/
String key = "aaaaaaaaaabbbbbbaaaaaaaaaabbbbbb";
/*
* source data
*/
System.out.println("source -------- fengye");

String enBytes = EncryptSample.encryptAES("fengye",key);

System.out.println("mi wen --------------- "+enBytes.toString());

String deBytes = EncryptSample.decryptAES(enBytes, key);

System.out.println("ming wen------------"+new String(deBytes));

}

/*
* 转为十六进制
*/
@SuppressWarnings("unused")
private static String asHex(byte buf[]) {
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;

for (i = 0; i < buf.length; i++) {
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");

strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
System.out.println(strbuf.toString());
return strbuf.toString();
}
/*
* 转为二进制
*/
@SuppressWarnings("unused")
private static byte[] asBin(String src) {
if (src.length() < 1)
return null;
byte[] encrypted = new byte[src.length() / 2];
for (int i = 0; i < src.length() / 2; i++) {
int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);

encrypted[i] = (byte) (high * 16 + low);
}
return encrypted;
}
/*
* 加密
*/
public static String encryptAES(String data, String secret_key) {
byte[] key = asBin(secret_key);
SecretKeySpec sKey = new SecretKeySpec(key, "AES");
try {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, sKey);
byte[] encrypted = cipher.doFinal(data.getBytes());

return asHex(encrypted);

} catch (Exception e) {
return null;
}
}
/*
* 解密
*/
public static String decryptAES(String encData, String secret_key) {
byte[] tmp = asBin(encData);
byte[] key = asBin(secret_key);
SecretKeySpec sKey = new SecretKeySpec(key, "AES");
try {
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, sKey);
byte[] decrypted = cipher.doFinal(tmp);
return new String(decrypted);
} catch (Exception e) {
return null;
}
}
}

分享到:
评论

相关推荐

    支持32位密钥的AES加解密

    标题中的“支持32位密钥的AES加解密”是指在Java开发环境中,使用AES(Advanced Encryption Standard)加密算法并允许使用长度为256位(即32字节)的密钥进行数据的加密与解密。AES是目前广泛应用的对称加密算法,以...

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

    在C#和Java之间进行AES加密和解密时,由于这两种编程语言的实现可能存在差异,因此需要确保跨平台的兼容性。本篇文章将详细讲解如何在C#中生成256位AES密钥,并在Java 1.8.0_180及更高版本中进行加密和解密操作。 ...

    javascript进行AES加密

    AES加密需要一个128位的密钥(16字节)和待加密的数据。可以使用`CryptoJS.enc.Hex`或`CryptoJS.enc.Utf8`等方式来创建密钥和待加密的字符串。 3. **加密过程**: 使用`CryptoJS.AES.encrypt()`方法进行加密,...

    本地图片AES加密解密

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

    STM32F103程序AES加密.zip_STM32 AES加密_aes stm32f103_stm32f103 硬件aes_

    2. **设置密钥**:AES加密需要预先设置密钥,可以使用HAL_AES_SetKey函数将密钥加载到硬件寄存器中。密钥长度根据实际需求选择,不同长度的密钥会增加加密的安全性但可能会影响性能。 3. **加密/解密数据**:在设置...

    AES加密算法 Delphi7

    AES加密算法,全称为Advanced Encryption Standard,是一种广泛应用的对称加密算法,因其高效性和安全性而备受推崇。在Delphi7这个古老的编程环境中,实现AES加密同样是非常重要的,特别是在保护数据安全、实现通信...

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

    AES(Advanced Encryption Standard)是一种对称密钥块加密算法,是一种快速、安全的加密算法。AES 加密算法使用同一个密钥进行加密和解密,可以确保数据的安全性。 Android 中的 AES 加密 在 Android 应用程序中...

    aes128加密可以任意密钥长度和明文长度

    标签"aes 128"暗示了主题集中在128位密钥的AES加密上,这在许多应用场景中已经足够安全,同时其性能也相对较高。在处理大量数据时,对称加密如AES比非对称加密(如RSA)更快。 总的来说,AES128是一种强大且高效的...

    不用cryptoJs的aes加密解密

    总之,不依赖cryptoJs的AES加密解密是通过自定义的JavaScript代码完成的,涉及的关键步骤包括密钥扩展、填充、字节到状态的转换、加密/解密过程以及Base64编码/解码。如果你需要在项目中实现这种功能,你需要深入...

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

    AES加密有很多轮的重复和变换。 在Java中使用AES加密和解密需要注意以下几点: 1. 密钥的生成:密钥的生成可以使用KeyGenerator来生成,需要指定固定的种子或不指定种子。 2. 密钥的存储:需要把加密用的密钥存储...

    Qt实现AES加密解密

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

    AES加密/解密算法,基于MFC下的 VC6.0

    3. **密钥扩展**:AES的密钥长度可以不同,但都需要通过密钥扩展转换成多个轮密钥,这是AES加密过程的关键步骤。 4. **初始化上下文**:调用库提供的函数初始化AES上下文,比如在OpenSSL中,可以使用`AES_set_...

    AES加密.rar java Aes加密方式

    1. 密钥生成:AES加密需要一个密钥来执行加解密操作。根据AES的版本(128位、192位或256位),需要生成相应长度的密钥。Java提供`javax.crypto.KeyGenerator`类用于生成AES密钥。例如: ```java KeyGenerator ...

    Qt实现AES加密和解密

    总之,虽然Qt本身不内置AES加密,但结合第三方库和Qt的现有组件,我们可以方便地实现AES加密和解密,为应用程序提供必要的安全保护。在开发过程中,务必遵循最佳实践,确保数据的完整性和安全性。

    C语言 stm32 AES加密解密

    在STM32上实现AES加密解密,通常需要利用其内部的加密硬件模块,如CryptoCell或DMA控制器,以提高性能和效率。STM32的HAL库或LL库提供了相应的API接口,用于配置和操作这些硬件资源。然而,对于没有内置加密硬件的...

    AES 加密字符串

    在Delphi和Java这两个不同的编程环境中,实现AES加密的方式略有不同,但核心原理是一致的。Delphi中通常使用第三方库如CryptoLib4Pascal或ElGammal库来实现AES加密。ElAES.pas可能是其中一个用于AES加密的Delphi组件...

    uniapp 前后端AES加密解密.rar

    本压缩包"uniapp 前后端AES加密解密.rar"正是为了解决这一问题,它包含了在uniapp环境下实现前后端AES加密解密的方法。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的对称加密算法,具有...

    Javascript实现Aes加密.doc

    Javascript 实现 AES 加密 AES 加密是对称加密算法的一...Javascript 实现 AES 加密可以使用 Chris Veness 的 AES 加密算法 JavaScript 实现,该实现使用Ctr模式进行加密和解密,并使用 Key Expansion 生成密钥计划。

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

    AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,它在信息安全领域扮演着至关...通过分析和实践这个示例,你可以掌握AES加密在实际编程中的应用,这对于任何涉及数据安全的项目都是非常有价值的。

    jdk8解除aes加密限制.zip

    当开发者试图使用256位密钥进行AES加密时,就会遇到上述错误。 要解除这个限制,你需要做以下几步: 1. **下载不受限的JCE政策文件**:你可以从Oracle官方网站或者其他可信赖的来源下载不受限制的JCE政策文件,...

Global site tag (gtag.js) - Google Analytics