加密/解密字符串(PHP)

加密/解密字符串(PHP),php,encryption,Php,Encryption,我需要加密和解密一个字符串。我不能使用散列,因为解密的字符串必须是可读的。我知道mcrypt,但我正在寻找使用证书文件进行加密和解密的东西 谢谢。您可以通过openssl使用公钥/私钥,并且只要使用一两次就非常简单 function encryptString($clearText) { $keyFile=fopen("public.pem","r"); $publicKey=fread($keyFile,8192); fclose($keyFile); openssl_get

我需要加密和解密一个字符串。我不能使用散列,因为解密的字符串必须是可读的。我知道mcrypt,但我正在寻找使用证书文件进行加密和解密的东西


谢谢。

您可以通过openssl使用公钥/私钥,并且只要使用一两次就非常简单

function encryptString($clearText)
{
  $keyFile=fopen("public.pem","r");
  $publicKey=fread($keyFile,8192);
  fclose($keyFile);

  openssl_get_publickey($publicKey);
  openssl_public_encrypt($clearText,$cryptText,$publicKey);
  return(base64_encode($cryptText));
}

function decryptString($cryptText)
{
  $keyFile=fopen("private.pem","r");
  $privateKey=fread($keyFile,8192);
  fclose($keyFile);

  openssl_get_privatekey($privateKey);
  $binText = base64_decode($cryptText);
  openssl_private_decrypt($binText,$clearText,$privateKey);
  return($clearText);
}
要生成密钥对,请参阅一个简短的指南

总之

openssl rsa -pubout -in private.pem -out public.pem
更新

@keepwalking在下面的命令行中询问了如何做到这一点,@vstm给出了一个很好的链接

要总结该页面,创建密钥后,可以使用以下命令加密文本文件file.txt并将其输出到file.ssl

openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
要将file.ssl解密为另一个文件decrypt.txt,可以使用以下命令

openssl rsautl -encrypt -inkey public.pem -pubin -in file.txt -out file.ssl
openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt

如果您想使用非对称加密,则必须使用-函数,或者如果您的php上没有openssl,则必须使用


另一件事是,不能像对称密钥那样使用证书。如果您的密文使用公钥加密(证书包含公钥),则必须使用私钥解密,如果密文使用私钥加密,则必须使用公钥解密,否则无法使用。

哦,谢谢。看起来很简单:)你能在命令行函数(openssl…)中翻译php函数吗?@keepwalking:check out。另请查看
openssl rsautl-help
,了解填充方案等选项。@keepwalking:您的意思是使用命令行函数加密和解密字符串吗?如果是这样的话,看看vtsm的链接。我已经用@vtsm发布的命令行示例更新了帖子。很好的链接。