本文阐述Java与PHP平台间利用AES算法实现数据加密解密互通的方案。Java端采用AES/CBC/PKCS5Padding加密模式,密钥长度128位,并使用SHA1PRNG处理密钥。我们将演示如何使用PHP的OpenSSL库实现与Java端兼容的AES加密和解密。
Java代码中,DefaultKeyService类负责AES密钥生成、加密和解密。核心代码片段如下:
@SneakyThrows public byte[] aesEncrypt(byte[] key, byte[] plaintext) { SecureRandom secureRandom = SecureRandom.getInstance(SECURE_RANDOM_ALGORITHM); secureRandom.setSeed(key); KeyGenerator kgen = KeyGenerator.getInstance(AES); kgen.init(AES_KEY_LENGTH, secureRandom); SecretKeySpec secretKeySpec = new SecretKeySpec(kgen.generateKey().getEncoded(), AES); Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION); IvParameterSpec iv = new IvParameterSpec(key); // 密钥用作IV cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv); return cipher.doFinal(plaintext); } @SneakyThrows public byte[] aesDecrypt(byte[] key, byte[] ciphertext) { // ... (解密代码与加密代码类似,Cipher.init模式不同) ... }
关键点:Java代码使用密钥本身作为初始化向量(IV)。PHP代码必须与之匹配。
PHP端实现:为了与Java端的AES/CBC/PKCS5Padding模式兼容,我们使用OpenSSL的openssl_encrypt和openssl_decrypt函数。PHP函数示例:
<?php function phpAesEncrypt($key, $plaintext) { $iv = $key; // 密钥用作IV,与Java端一致 return openssl_encrypt($plaintext, 'aes-128-cbc', $key, 0, $iv); } function phpAesDecrypt($key, $ciphertext) { $iv = $key; // 密钥用作IV,与Java端一致 return openssl_decrypt($ciphertext, 'aes-128-cbc', $key, 0, $iv); } ?>
PHP代码中aes-128-cbc对应Java端的AES/CBC/PKCS5Padding。同样关键的是,PHP代码也使用密钥作为IV,确保与Java代码一致性,从而实现加密和解密的成功。 密钥需以相同方式在Java和PHP之间传输和使用。 注意:直接使用密钥作为IV并非最佳安全实践,生产环境应使用随机生成的IV并与密文一起存储和传输。
通过以上Java和PHP代码的配合,即可实现Java加密的数据在PHP端解密,以及PHP加密的数据在Java端解密。 务必妥善保管密钥,确保其安全性。
以上就是Java和PHP AES加密解密如何实现互通?的详细内容,更多请关注知识资源分享宝库其它相关文章!
版权声明
本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com
发表评论