Зашифровать / расшифровать строку (PHP) - PullRequest
3 голосов
/ 20 сентября 2011

Мне нужно зашифровать и расшифровать строку. Я не могу использовать хеш, потому что расшифрованная строка должна быть читаемой. Я знаю о mcrypt, но я искал что-то, что использует файл сертификата для шифрования и дешифрования.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2011

Вы можете использовать открытый / закрытый ключ через 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

Чтобы расшифровать file.ssl в другой файл decrypt.txt , вы можете использовать следующую команду.

openssl rsautl -decrypt -inkey private.pem -in file.ssl -out decrypted.txt
1 голос
/ 20 сентября 2011

Хорошо, если вы хотите использовать асимметричную криптографию , вы должны либо использовать openssl _ * -функции, либо phpseclib , если openssl недоступен на вашем php .

Другое дело, что вы не можете использовать сертификат, такой как симметричный ключ . Если у вас есть зашифрованный текст, зашифрованный с помощью открытого ключа (сертификат содержит открытый ключ), вам придется расшифровать с помощью закрытого ключа, а если зашифрованный текст зашифрован с помощью личного ключа, то вам придется расшифровать с помощью открытого ключа, иначе он выиграет ». т работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...