如何在php中加密和解密字符串?

如何在php中加密和解密字符串?,php,encryption,php-openssl,Php,Encryption,Php Openssl,根据本教程,我尝试对字符串进行加密和解密 加密效果良好: $token = "The quick brown fox jumps over the lazy dog."; $cipher_method = 'aes-128-ctr'; $enc_key = openssl_digest(php_uname(), 'SHA256', TRUE); $enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cip

根据本教程,我尝试对字符串进行加密和解密

加密效果良好:

  $token = "The quick brown fox jumps over the lazy dog.";

  $cipher_method = 'aes-128-ctr';
  $enc_key = openssl_digest(php_uname(), 'SHA256', TRUE);
  $enc_iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher_method));
  $crypted_token = openssl_encrypt($token, $cipher_method, $enc_key, 0, $enc_iv) . "::" . bin2hex($enc_iv);
  unset($token, $cipher_method, $enc_key, $enc_iv);

  var_dump($crypted_token);
输出为
KZ4LUHESC0Y8/UFY1WSIO6AAYXW7MvUW8NBKQHE5CNLSPZ+540p1ClhIZvKNx::254f830c42c937fb7e1e2444c632a8a4

但当我想再次解密它时:

$crypted_token = "KZ4LurHESC0Y8/Ufy1wsio6aaYXW7m7KVuW8NBKQhE5CnLspz+540p1ClhIZvKNx::254f830c42c937fb7e1e2444c632a8a4";

  list($crypted_token, $enc_iv) = explode("::", $crypted_token);;
  $cipher_method = 'aes-128-ctr';
  $enc_key = openssl_digest(php_uname(), 'SHA256', TRUE);
  $token = openssl_decrypt($crypted_token, $cipher_method, $enc_key, 0, hex2bin($enc_iv));
  unset($crypted_token, $cipher_method, $enc_key, $enc_iv);

  var_dump($token);
我得到输出:

"m PHĝ��Jt�nx���l����$�۩!Z��� [b���f�" 
正如我所期待的:

The quick brown fox jumps over the lazy dog.

代码中没有错误。php_uname()已禁用。启用php_uname()并重试。

这意味着响应是二进制格式的。试着用hex2bin()转换它,看看你得到了什么。

我试着用你加密的令牌,但我的输出是
��B�Ì�U��Q@�bƃ�-G6������!�M�,+�M�
@peace\u love使用我在答案中输入的相同代码,并查看我的End是否正在工作。我将您的代码复制到php测试人员并向您发送了一封电子邮件screenshot@peace_love它的出现是因为php_uname()被禁用。请启用并重试。请参阅警告:出于安全原因,php_uname()已被禁用。我应该这样做吗?在控制台中的我的mac订单上。?在php.ini中?