要加密或解密的数据必须是16的倍数。
package com.hx.dlms.cipher;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import cn.hexing.fk.utils.HexDump;
public class AESECB128 {
private static final byte[] staticKey = HexDump.toByteBuffer("00000000000000000000000000000000").array();
public static byte[] encrypt(byte[] plainText) {
return encrypt(plainText,staticKey);
}
/**
* 加密
*
* @param content
* 需要加密的内容
* @param enckey
* 加密密码
* @return
*/
public static byte[] encrypt(byte[] content, byte[] enckey) {
try {
SecretKeySpec key = new SecretKeySpec(enckey, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// 创建密码器
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
public static byte[] decrypt(byte[] cipherText) {
return decrypt(cipherText,staticKey);
}
/**
* 解密
*
* @param content
* 待解密内容
* @param deckey
* 解密密钥
* @return
*/
public static byte[] decrypt(byte[] content, byte[] deckey) {
try {
SecretKeySpec key = new SecretKeySpec(deckey, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(content);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String content = "6789:;<=>?@AB012";
String password = "00000000000000000000000000000000";
byte[] mykey = HexDump.toByteBuffer(password).array();
// 加密
System.out.println("加密前:" + content);
byte[] encryptResult = encrypt(content.getBytes(), mykey);
System.out.println("cipher text: " + HexDump.hexDumpCompact(encryptResult,0,encryptResult.length));
// 解密
byte[] decryptResult = decrypt(encryptResult, mykey);
System.out.println("解密后:" + new String(decryptResult));
}
}
分享到:
相关推荐
3. **加密**:调用`openssl_encrypt`函数,传入明文、加密算法('AES-128-ECB')、操作模式(OPENSSL_RAW_DATA表示不使用base64编码输出)以及密钥。例如: ```php $key = 'your_128bit_key'; $plaintext = 'This...
在这个"nodejs的base64和aes-128-ecb加密.rar"压缩包中,包含的`EncryptTool.js`和`EncryptTool.ts`文件很可能是两个实现Base64编码和AES-128-ECB加密的工具类。接下来,我们将深入探讨这两个知识点。 首先,Base64...
**AES-128-ECB加密算法** AES(Advanced Encryption Standard)是一种块密码,它使用128位的数据块进行操作,并有多种密钥长度:128位、192位和256位。在这个例子中,我们使用的是128位的密钥,即AES-128。ECB...
之前遇到的需求,ios上没有类似的实现。搞了好久在网上搜了很多资料都不能解决最后找到了一个c/c++的底层源码,才实现了最后整理了下上传了。...运行在xcode环境下,关键算法的文件是AES.h和AES.mm文件。
AES,即高级加密标准,是目前广泛使用的对称加密算法,因其高效性和安全性而被广泛采用。ECB(Electronic Codebook)模式是AES的一种工作模式,它将明文数据块按固定大小进行分组并分别加密。128位则指的是密钥长度...
AES-128加密算法是高级加密标准(Advanced Encryption Standard)的一种变体,它使用128位的密钥对数据进行加密。AES是目前最广泛使用的对称加密算法之一,因其高效性和安全性而备受推崇。在C语言中实现AES-128,...
在编写AES_ECB加密程序时,需要注意以下几点: - 保证密钥和明文的有效性,通常AES要求密钥长度为128、192或256位,明文块必须是128位。 - 确保数据的安全存储,避免明文和密钥在内存中被泄露。 - 如果需要加密大...
微信官方提供了多种编程语言的示例代码 https://mp.weixin.qq.com/debug/wxadoc/dev/demo/aes-sample.zip 。发现没有 c# 和 java 的AES-128-CBC加密解密处理,然后我补充一下 c# 和 java 配合的加密解密
标准数测试通常指的是对加密算法进行的一系列基准测试,以验证其正确性和效率。这些测试可能包括NIST(美国国家标准与技术研究所)发布的SP800-38A等标准,其中包含了各种已知的测试向量,确保加密库在处理不同输入...
AES128是一种广泛使用的对称加密算法,全称为Advanced Encryption Standard,128表示其块大小为128位。在嵌入式系统和单片机应用中,AES128由于其高效性和安全性而备受青睐。ECB(Electronic Codebook)和CBC...
1、完整的AES(ECB、CBC、CFB、CTR)算法,C语言实现,可用于金融POS安全认证;...2、AES-128、AES-192、AES-256加密/解密 3、内含测试程序,在Linux环境下进入目录后make即可编译,已经在ubuntu16.04环境下编译测试OK;
AES是一种广泛使用的块加密算法,由NIST(美国国家标准和技术研究所)在2001年采纳为标准。它基于替换和置换网络,提供128位的块大小和128、192或256位的密钥长度。AES的工作原理是通过一系列的混淆和扩散步骤,将...
C++ AES算法ECB模式包含128,192,256三种密钥
在本项目中,开发者使用了C语言在Visual Studio 2008环境下实现了一个AES分组加密算法的ECB(Electronic Codebook)模式版本。 **AES算法基础** AES由一系列称为轮的操作组成,包括字节替换(SubBytes)、行移位...
AES-128-ECB,AES-128-CBC,AES-128-OFB,AES-128-CFB,AES-128-CTR。AES-192-ECB,AES-192-CBC,AES-192-OFB,AES-192-CFB,AES-192-CTR。AES-256-ECB,AES-256-CBC,AES-256-OFB,AES-256-CFB,AES-256-CTR。DES:。DES-ECB,...
4. **初始化加密器**:创建一个AES-128的ECB加密对象,并设置密钥。 5. **加密**:将预处理后的数据块送入加密器,得到密文。 6. **解密**:解密过程与加密类似,只是使用了相同的密钥和ECB解密器。解密后,需要...
在`python3-AES128-master`这个项目中,可能包含了使用Python实现AES-128 ECB加密的示例代码,包括如何创建加密器,填充数据,以及加密和解密的过程。你可以通过查看源代码学习具体实现细节。在实际项目中,记得根据...
PHP作为广泛使用的服务器端脚本语言,提供了多种加密算法,其中AES(Advanced Encryption Standard)是一种广泛应用的对称加密算法。本篇文章将详细探讨PHP如何实现AES128 ECB(Electronic Codebook)模式的加密。 ...
在本文中,我们将深入探讨如何在PHP7和JavaScript的CryptoJS库之间实现AES-128-ECB加密方式的互通。AES(Advanced Encryption Standard),即高级加密标准,是一种广泛使用的块加密算法,128-ECB表示使用128位的密钥...
C语言 实现AES_CBC_128_ZeroPadding 加解密算法 完整可编译工程