1、标准的AES-EBC-128模式
标准的AES-EBC-128模式,会将key转化为bytes类型进行加密
const message = "my message";
const key = CryptoJS.enc.Utf8.parse("0pzGktg6COiRmQGS");
const encrypted = CryptoJS.AES.encrypt(message, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted.toString());
2、官方示例非标准的用法
//在非标准的key可以使用字符串
const bytes = CryptoJS.AES.decrypt(CryptoJS.AES.encrypt('my message', 'secret key 123'), '0pzGktg6COiRmQGS');
console.log(bytes.toString(CryptoJS.enc.Utf8));
3、PHP加解密使用标准的方法(PKCS7Padding模式)
//PHP 的aes 加解密中使用的是标准方式,将字符串转化为byte
$data = "my message";
$key = "0pzGktg6COiRmQGS";
$algo = "AES-128-ECB";
var_dump(openssl_decrypt(openssl_encrypt($data,$algo,$key),$algo,$key));
4、java hutools版本
hutools PKCS7Padding 写法,注意java的秘钥长度为16,而PHP不够长度则会采用NULL填充
AES aes = new AES("ECB", "PKCS7Padding",
"0pzGktg6COiRmQGS".getBytes(),
// iv加盐,按照实际需求添加
null);
// 加密为16进制表示
String content = "my message";
String encryptBase64 = aes.encryptBase64(content);
System.out.println(encryptBase64);
5、java 版本 PKCS7Padding 用法
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
// 密钥字符串
String keyString = "0pzGktg6COiRmQGS";
// 添加Bouncy Castle作为安全提供者 BC
Security.addProvider(new BouncyCastleProvider());
// 密钥需要被转换为字节数组,并且长度必须是16字节(对于AES-128)
byte[] keyBytes = new byte[16];
byte[] keyBytesFull = keyString.getBytes();
System.arraycopy(keyBytesFull, 0, keyBytes, 0, Math.min(keyBytesFull.length, keyBytes.length));
// 创建SecretKeySpec对象
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 初始化Cipher对象,设置为加密模式,使用Bouncy Castle提供者
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC"); // 使用BC作为提供者
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
// 待加密的明文
String plainText = "my message";
byte[] plainTextBytes = plainText.getBytes();
// 执行加密操作
byte[] cipherTextBytes = cipher.doFinal(plainTextBytes);
// 使用Base64编码加密后的字节数组,以便能够打印和存储
String cipherTextBase64 = Base64.getEncoder().encodeToString(cipherTextBytes);
// 输出加密结果
System.out.println("Encrypted text (Base64): " + cipherTextBase64);