加密/解密字符串(PHP)


Crypt/decrypt string (PHP)

我需要加密和解密一个字符串。我不能使用哈希,因为解密的字符串必须是可读的。我知道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);
}

生成密钥对,一个简单的指南是http://en.wikibooks.org/wiki/Transwiki:Generate_a_keypair_using_OpenSSL

不足
openssl rsa -pubout -in private.pem -out public.pem

@keepwalking在下面询问如何从命令行做到这一点,@vstm给出了一个很棒的链接http://www.devco.net/archives/2006/02/13/public_-_private_key_encryption_using_openssl.php。

总结一下,一旦创建了密钥,就可以加密文本文件file.txt并将其输出到file。Ssl 使用以下命令:

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

解密文件。Ssl 到另一个文件decrypt.txt,可以使用以下命令:

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

如果你想使用非对称加密你要么必须使用openssl_*-functions或phpseclib(如果你的php上没有openssl)

另一件事是,您不能使用像对称密钥这样的证书。如果你有一个用公钥加密的密文(证书包含公钥),那么你必须使用私钥解密,如果密文是用私钥加密的,那么你必须使用公钥解密,否则它将不起作用。