如何将Java AES加密代码迁移到PHP 7?(迁移.如何将.加密.代码.PHP...)
Java AES 加密代码迁移至 PHP 7 的详细指南
本文将详细介绍如何将 Java AES 加密代码迁移到 PHP 7 环境。Java 代码使用 Base64 编码返回加密结果,密钥生成方式独特,需要仔细对应。
原始 Java 代码:
public static String encrypt(String str, String secretkey) { try { Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, getKey(secretkey)); byte[] result = cipher.doFinal(str.getBytes()); return Base64.encodeBase64String(result); } catch (Exception e) { logger.error(e.getMessage(), e); } return ""; } private static Key getKey(String secretkey) { try { KeyGenerator keyGenerator = KeyGenerator.getInstance("AES"); SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); secureRandom.setSeed(secretkey.getBytes()); keyGenerator.init(128, secureRandom); SecretKey secretKey1 = keyGenerator.generateKey(); byte[] byteKey = secretKey1.getEncoded(); return new SecretKeySpec(byteKey, "AES"); } catch (Exception e) { logger.error(e.getMessage(), e); return null; } }
这段 Java 代码的核心是使用 AES 算法加密,并用 Base64 编码输出结果。密钥生成使用 SHA1PRNG 作为随机数生成器,并以输入的 secretkey 作为种子。
PHP 7 等效代码:
在 PHP 7 中,可以使用 openssl_encrypt 函数实现 AES 加密,并用 base64_encode 进行 Base64 编码。密钥生成需要使用 openssl_random_pseudo_bytes 生成随机密钥,并结合 secretkey 模拟 Java 代码中使用 secretkey 作为种子的行为。 直接使用 secretkey 作为密钥是不安全的,必须进行衍生或哈希处理。 为简化起见,此处假设 secretkey 足够长且随机,直接用作密钥生成过程的输入。
<?php function encrypt($str, $secretKey) { $key = hash('sha256', $secretKey, true); // 使用 SHA256 哈希处理,确保密钥长度足够 $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-128-cbc')); // 生成初始化向量 $encrypted = openssl_encrypt($str, 'aes-128-cbc', $key, 0, $iv); return base64_encode($encrypted . '::' . $iv); // 连接加密数据和初始化向量,并进行 Base64 编码 } // 示例调用 $secretKey = "yourSecretKey"; // 请替换为你的密钥 $plaintext = "yourPlainText"; $encrypted = encrypt($plaintext, $secretKey); echo $encrypted; ?>
这段 PHP 代码使用了 aes-128-cbc 模式,与 Java 代码中隐含的模式一致(未指定模式则默认使用)。为了安全起见,我们使用 SHA256 对 secretkey 进行哈希处理以生成最终密钥。我们还生成了一个初始化向量 (IV) 并将其与加密数据一起返回,以便解密时使用。这在 Java 代码中没有显式体现,但 aes-128-cbc 模式需要 IV。
重要提示: 这只是一个示例,实际应用中需要根据具体安全需求调整密钥生成和加密模式。 务必避免直接使用弱密钥或不安全的密钥生成方法。在生产环境中,建议使用更强的加密算法和更安全的密钥管理机制。 请记住替换 "yourSecretKey" 和 "yourPlainText" 为您的实际密钥和明文。
以上就是如何将Java AES加密代码迁移到PHP 7?的详细内容,更多请关注知识资源分享宝库其它相关文章!