PHP 加密在服务器上不起作用
PHP encryption not working on server
我正在尝试将加密的 cookie 存储在 PHP 应用程序中,并已实施 2 个不同的加密库以尝试使其正常工作。
当部署到服务器时,这两种实现在调用我的加密函数时都会产生致命异常。然而,在我的本地开发环境中,两种加密实现都运行成功。
我的open_ssl实现代码(适用于本地主机,不适用于远程服务器):
set_encrypted_cookie("foo","my_cookie_name");
function set_encrypted_cookie($msg,$name){
$key = '0123456qwerty'; // Key is stored externally but defined locally for debugging
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encryptedStr = openssl_encrypt($msg, 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
setcookie($name,$encryptedStr,0,'/');
}
关于为什么服务器可能不允许 openssl_encrypt() 函数执行的任何想法?
openssl_encrypt()
returns 原始二进制文件,您应该 base64_encode()
在存储到 cookie 之前。
在你这样做之前,你可以做一些事情来改进你的密码协议:
- 使用
MCRYPT_DEV_URANDOM
,而不是 MCRYPT_RAND
。
- 将您的 IV 与您的密文一起存储(在
base64_encode()
对其进行加密之前),因此您可以在解密时使用相同的 IV。
- Encrypt then MAC.
最后一个 link 有两个功能,setLessUnsafeCookie()
和 getLessUnsafeCookie()
,您可以将它们用作 PHP 5.6.x .
为了安全使用,还有两件事要做:
- 使用 HKDF 将密钥拆分为加密密钥和解密密钥。
- 对明文使用 PKCS7 填充。
(如果你想获得最大的安全性,你可以use libsodium instead of openssl.) Also, don't use mcrypt。
我正在尝试将加密的 cookie 存储在 PHP 应用程序中,并已实施 2 个不同的加密库以尝试使其正常工作。
当部署到服务器时,这两种实现在调用我的加密函数时都会产生致命异常。然而,在我的本地开发环境中,两种加密实现都运行成功。
我的open_ssl实现代码(适用于本地主机,不适用于远程服务器):
set_encrypted_cookie("foo","my_cookie_name");
function set_encrypted_cookie($msg,$name){
$key = '0123456qwerty'; // Key is stored externally but defined locally for debugging
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encryptedStr = openssl_encrypt($msg, 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
setcookie($name,$encryptedStr,0,'/');
}
关于为什么服务器可能不允许 openssl_encrypt() 函数执行的任何想法?
openssl_encrypt()
returns 原始二进制文件,您应该 base64_encode()
在存储到 cookie 之前。
在你这样做之前,你可以做一些事情来改进你的密码协议:
- 使用
MCRYPT_DEV_URANDOM
,而不是MCRYPT_RAND
。 - 将您的 IV 与您的密文一起存储(在
base64_encode()
对其进行加密之前),因此您可以在解密时使用相同的 IV。 - Encrypt then MAC.
最后一个 link 有两个功能,setLessUnsafeCookie()
和 getLessUnsafeCookie()
,您可以将它们用作 PHP 5.6.x .
为了安全使用,还有两件事要做:
- 使用 HKDF 将密钥拆分为加密密钥和解密密钥。
- 对明文使用 PKCS7 填充。
(如果你想获得最大的安全性,你可以use libsodium instead of openssl.) Also, don't use mcrypt。