【问题标题】:Mock a private/public key in a unit test?在单元测试中模拟私钥/公钥?
【发布时间】:2025-12-03 17:10:02
【问题描述】:

目前我有一个使用openssl_public_encrypt/openssl_private_decrypt 的代码库。现在我想通过单元测试来测试我的加密和解密方法,因为这些非常重要。

要真正测试它们,我想我想简单地模拟私钥和公钥。这是可行的吗?我将如何在不将任何敏感信息放入我的代码库的情况下模拟这些键?

当然,我可以绕过 openssl 公共/私有部分并模拟其结果,但这种逻辑也会引发一些我想测试的异常等。

【问题讨论】:

  • 从您的描述中不太清楚您要测试什么以及问题是什么。生成一个新的私钥/公钥对并将其用于测试(并将其放入存储库中)。只要它们不用于在真实系统上进行身份验证,它们就不是敏感信息。

标签: php phpunit public-key-encryption php-openssl


【解决方案1】:

如果您安装并启用了 PHP 的 OpenSSL 扩展,那么您可以使用 OpenSSL 函数生成您的公钥/私钥对:

openssl_pkey_new,对于 私钥

$private_key = openssl_pkey_new([
    'digest_alg' => 'sha256',
    'private_key_bits' => 1024,
    'private_key_type' => OPENSSL_KEYTYPE_RSA
]);

然后将私钥传递给openssl_pkey_get_details 以获取有关密钥的详细信息,包括公钥

$details = openssl_pkey_get_details($private_key);
$public_key = $details['key'];

【讨论】: