
Java和PHP AES加密解密互通详解
本文阐述Java与PHP平台间利用AES算法实现数据加密解密互通的方案。Java端采用AES/CBC/PKCS5Padding加密模式,密钥长度128位,并使用SHA1PRNG处理密钥。我们将演示如何使用PHP的OpenSSL库实现与Java端兼容的AES加密和解密。
Java代码中,DefaultKeyService类负责AES密钥生成、加密和解密。核心代码片段如下:
@SneakyThrowspublic 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);}@SneakyThrowspublic byte[] aesDecrypt(byte[] key, byte[] ciphertext) { // ... (解密代码与加密代码类似,Cipher.init模式不同) ...}
关键点:Java代码使用密钥本身作为初始化向量(IV)。PHP代码必须与之匹配。
PHP端实现:为了与Java端的AES/CBC/PKCS5Padding模式兼容,我们使用OpenSSL的openssl_encrypt和openssl_decrypt函数。PHP函数示例:
立即学习“PHP免费学习笔记(深入)”;
PHP代码中aes-128-cbc对应Java端的AES/CBC/PKCS5Padding。同样关键的是,PHP代码也使用密钥作为IV,确保与Java代码一致性,从而实现加密和解密的成功。 密钥需以相同方式在Java和PHP之间传输和使用。 注意:直接使用密钥作为IV并非最佳安全实践,生产环境应使用随机生成的IV并与密文一起存储和传输。
通过以上Java和PHP代码的配合,即可实现Java加密的数据在PHP端解密,以及PHP加密的数据在Java端解密。 务必妥善保管密钥,确保其安全性。
以上就是Java和PHP AES加密解密如何实现互通?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1253973.html
微信扫一扫
支付宝扫一扫