PHP RSA加密逻辑


PHP RSA Encryption Logic

我需要发送一个用公钥RSA加密的密码(以及一些其他数据)。以下是文档中关于密码的确切说明:

  • 用Base64编码密码并确保UTF-8编码
  • 使用RSA加密密码,提供公钥、无块模式和PKCS1Padding
  • 使用确保的UTF-8编码在Base64中对结果加密进行编码

这是我使用的代码,对我来说似乎是正确的:

function encryptPassword($pass) {
    $pass = base64_encode($pass);
    $fp = fopen("./cert.crt", "r");
    $publicKey = fread($fp, 8192);
    fclose($fp);
    openssl_get_publickey($publicKey);
    openssl_public_encrypt($pass, $cryptedText, $publicKey, OPENSSL_PKCS1_PADDING);
    return base64_encode(utf8_encode($cryptedText));
}

我在另一边收到一个错误,说密码无法解码。除了错误信息之外,他们的支持基本上不存在,他们说一切都是正确的。我的问题是,我是否根据文件发送了他们要求的内容?

提前感谢!

不,您采用了Base64,并确保了UTF-8编码过于字面化。utf8_encode将一种文本编码转换为另一种,但$cryptedText不是文本编码。它是一个二进制字符串,因此在编码过程中会丢失一些字符。只需删除它,因为Base64已经为您提供了二进制数据的文本表示:

return base64_encode($cryptedText);

此外,您可能希望将公钥资源传递给加密函数:

$key_resource = openssl_get_publickey($publicKey); 
openssl_public_encrypt($pass, $cryptedText, $key_resource, OPENSSL_PKCS1_PADDING);