以下是一个简单的示例代码:
// 加载私钥文件 $private_key = openssl_pkey_get_private(file_get_contents('private.key')); // 加载公钥文件 $public_key = openssl_pkey_get_public(file_get_contents('public.key')); // 待签名的数据 $data = 'Hello, world!'; // 计算 SHA256 哈希值 $digest = hash('sha256', $data, true); // 使用私钥进行签名 openssl_sign($digest, $signature, $private_key, OPENSSL_ALGO_SHA256); // 验证签名是否正确 $result = openssl_verify($digest, $signature, $public_key, OPENSSL_ALGO_SHA256); if ($result == 1) { echo 'Signature is valid'; } elseif ($result == 0) { echo 'Signature is invalid'; } else { echo 'Verification error: ' . openssl_error_string(); } // 释放密钥资源 openssl_free_key($private_key); openssl_free_key($public_key);
在上面的代码中,我们首先使用 openssl_pkey_get_private
和 openssl_pkey_get_public
函数分别加载私钥和公钥。然后,我们定义了要签名的数据,并使用 hash
函数计算出其 SHA256 哈希值。接下来,我们调用 openssl_sign
函数使用私钥对哈希值进行签名。最后,我们调用 openssl_verify
函数验证签名是否正确。
需要注意的是,在实际应用中,我们通常不会直接将私钥和公钥存储在文件中,而是通过其他安全的方式进行管理和传输。此外,还需要考虑如何保护密钥不被泄露,并且签名算法的性能也需要进行优化。