cryptojs aes-128-ebc 加密方法对应JAVA PHP写法

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);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容