Php mcrypt_模块打开()警告!
我在MacOSX上使用Mamp服务器。我正在尝试在我的客户端cookie项目中实现加密。我收到了警告 警告:mcrypt_module_open()[function.mcrypt module open]:无法打开加密模块 我签入了php.ini文件,在mcrypt扩展名前面没有分号。有人能帮忙解决这个问题吗Php mcrypt_模块打开()警告!,php,mamp,Php,Mamp,我在MacOSX上使用Mamp服务器。我正在尝试在我的客户端cookie项目中实现加密。我收到了警告 警告:mcrypt_module_open()[function.mcrypt module open]:无法打开加密模块 我签入了php.ini文件,在mcrypt扩展名前面没有分号。有人能帮忙解决这个问题吗 提前感谢在php.ini中启用了mcrypt模块,否则您将在调用未定义函数时收到错误消息 它表明请求的密码方法不可用。您可能有输入错误,或者其中一个密码没有编译到您的mcrypt.so版
提前感谢在php.ini中启用了mcrypt模块,否则您将在调用未定义函数时收到错误消息 它表明请求的密码方法不可用。您可能有输入错误,或者其中一个密码没有编译到您的
mcrypt.so
版本中
mcrypt_module_open('rijndael-256', '', 'ofb', ''); // works
mcrypt_module_open('wrong', '', '', ''); // generates your error
和额外的参数表明系统上的libmcrypt可能依赖于共享模块本身。因此,您可能需要搜索另一个版本。尝试MAMP更新,或者使用该PHP发行版的pro版本。我正在CFB模式下使用blowfish算法
static $cipher = 'blowfish';
static $mode = 'cfb';
static $key = '$pxaWyXY67UIq*i&mNlFswBzyJkL7#1N';
我用来调用算法的命令是
mcrypt_module_open($cipher, '', $mode, '');
我会尝试另一种算法,并检查它是否有效。@mario:谢谢你的回复。这是我的加密代码
class Cookie {
private $created;
private $userid;
private $version;
// mcrypt handle
private $td;
// mcrypt information
static $cipher = 'rijndael-256';
static $mode = 'ofb';
static $key = '$pxaWyXY67UIq*i&mNlFswBzyJkL7#1N';
// Cookie format information
static $cookiename = 'USERAUTH';
static $myversion = '1';
// When the cookie expires
static $expiration = '600';
// When to reissue the cookie
static $warning = '300';
static $glue = '|';
public function __construct($userid = false) {
$this->td = mcrypt_module_open($cipher, '', $mode, '');
if($this->userid) {
$this->userid = $userid;
} else {
if(array_key_exists(self::$cookiename, $_COOKIE)) {
$buffer = $this->_unpackage($_COOKIE[self::$cookiename]);
} else {
throw new AuthException("No Cookie");
}
}
}
public function _encrypt($plaintext) {
//$td = mcrypt_module_open (self::$cipher, '', self::$mode, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size ($td), MYCRYPT_RAND);
mcrypt_generic_init ($td, $plaintext);
$crypttext = mcrypt_generic($td, $plaintext);
mcrypt_generic_deinit ($td);
return $iv.$crypttext;
}
public function _decrypt($crypttext) {
//$td = mcrypt_module_open (self::$cipher, '', self::$mode, '');
$ivsize = mcrypt_enc_get_iv_size ($td);
$iv = substr ($crypt, 0, $ivsize);
$crypttext = substr ($crypttext, $ivsize);
$plaintext = "";
if($iv) {
mcrypt_generic_init($td, self::$key, $iv);
$plaintext = mdecrypt_generic($td, $crypttext);
mcrypt_generic_deinit ($td);
}
return $plaintext;
}
我还使用了George Schlassnagles“高级PHP编程”(第334ff页)中的这个示例。此代码包含一些错误。当您引用静态变量时,我认为您必须使用self:$var调用它 这一条应该有效:
mcrypt_module_open(self::$cipher, '', self::$mode, '');
请注意,还有一些错误,如:
- validate()函数中的self::$resettime显然应命名为self::$warning
- 函数_encrypt()和_decrypt()中的静态$key应该是self::$key
- _package()和_解包函数中的$glue应该是self::$glue
- 函数_reissue()从未使用过
- 函数_encrypt()中的$td应该是$this->td
- 函数set()和logout()中的set_cookie应命名为setcookie,并提供一个路径“/”(第四个参数),以便在整个网站上使用cookie(否则,如果在/login/facebook上设置cookie,则无法在/dashboard中访问)
- $ivsize=mcrypt\u get\u iv\u size($this->td);in _decrypt()应该是
$ivsize=mcrypt_get_iv_size(self:$cypher,self:$mode)代码>
我遇到了这个问题(PHP5.5 Solaris10/Sparc)我尝试使用rijndael-256。就连这个也不行。说到Mamp pro,我更喜欢免费版而不是购买。我检查了phpinfo页面,页面显示mcrypt已启用。我在谷歌上看不到任何解决方案。你能帮我解决这个问题吗。我不知道如何摆脱这个警告并使其生效。除非你展示相关的代码部分,否则每个人都只能猜测。