我如何安装mcrypt?我正在使用Leopard 10.5.8和PHP5.
我对加密知之甚少,但我能够让AES在某种程度上使用PHP.以下是我正在使用的几个函数:
function aes_decrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode = MCRYPT_MODE_ECB;
$enc = MCRYPT_RIJNDAEL_128;
$dec = @mcrypt_decrypt($enc, $key, $val, $mode, @mcrypt_create_iv( @mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND) );
return rtrim($dec,(( ord(substr($dec,strlen($dec)-1,1))>=0 and ord(substr($dec, strlen($dec)-1,1))<=16)? chr(ord( substr($dec,strlen($dec)-1,1))):null));
}
function aes_encrypt($val,$ky)
{
$key="\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
for($a=0;$a<strlen($ky);$a++)
$key[$a%16]=chr(ord($key[$a%16]) ^ ord($ky[$a]));
$mode=MCRYPT_MODE_ECB;
$enc=MCRYPT_RIJNDAEL_128;
$val=str_pad($val, (16*(floor(strlen($val) / 16)+(strlen($val) % 16==0?2:1))), chr(16-(strlen($val) % 16)));
return mcrypt_encrypt($enc, $key, $val, $mode, mcrypt_create_iv( mcrypt_get_iv_size($enc, $mode), MCRYPT_RAND));
}
Run Code Online (Sandbox Code Playgroud)
这些是对mcrypt的PHP文档页面上的注释稍作修改的.(我从dev_urandom更改为rand,因为我在windows框中,dev_urandom不可用.)
无论如何,我在这个函数中使用的键定义如下:
define("PSK", pack("H*", "abcd7b5ca46e12345678a8161fdacee9"));
Run Code Online (Sandbox Code Playgroud)
我把这个函数称为:
echo bin2hex(aes_encrypt("wootwootwootwootwootwootwoo", PSK));
现在,生成的十六进制字符串的前16个字节(32位)很好.接下来的16个字节与预期的不匹配.
请参阅,我将此数据发布到外部Web服务,然后将其解密.我(遗憾的是)不能给出我没有分发加密密钥和数据的测试用例.我非常抱歉,但我希望熟悉mcrypt的人可以看看这个并告诉我我做错了什么.
再次,对于缺乏可靠的测试用例感到遗憾,但我非常感谢您提供的任何帮助!
编辑:我发布的似乎是我的提供商正在使用null …
Shawn Chin在答案1中解决了问题.让我疯狂的是,编译mcrypt扩展,只有libmcrypt就足够了,没有必要编译mhash和mcrypt :(
我想为php编译mcrypt扩展(RHEL5.1,Intel i5 650),这是我的程序
# libmcrypt
tar zxf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/home/felix021/lamp/libmcrypt/
make
make install
# mhash
tar jxf mhash-0.9.9.9.tar.bz2
cd mhash-0.9.9.9
./configure --prefix=/home/felix021/lamp/mhash/
make
make install
# mcrypt
LD_LIBRARY_PATH=/home/felix021/lamp/libmcrypt/lib:/home/felix021/lamp/mhash/lib
./configure --prefix=/home/felix021/lamp/mcrypt/ \
--with-libmcrypt-prefix=/home/felix021/lamp/libmcrypt
Run Code Online (Sandbox Code Playgroud)
配置失败并注意到:
checking for mhash_keygen in -lmhash... no
configure: error: "You need at least libmhash 0.8.15 to compile this program. \
http://mhash.sf.net/"
Run Code Online (Sandbox Code Playgroud)
所以我下载了mhash0.8.18和mhash0.8.15,但是发生了同样的错误.
我在0.8.15/8中查找了"mhash_keygen":
int mhash_keygen(xxx,xxx,xxx)
Run Code Online (Sandbox Code Playgroud)
它在0.9.9.9:
#if defined(PROTOTYPES)
mutils_error mhash_keygen(keygenid algorithm, ....)
#else
mutils_error mhash_keygen();
#endif
//typedef uint32 mutils_error
Run Code Online (Sandbox Code Playgroud)
但是,mcrypt-2.6.8/configure +12114,它是:
char …Run Code Online (Sandbox Code Playgroud) 我正在使用以下加密代码,它的功能类似于魅力,但我必须验证它是否符合FIPS 197,否则Legal会杀了我.
mcrypt_encrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
MCRYPT_RAND))
Run Code Online (Sandbox Code Playgroud)
和
mcrypt_decrypt(MCRYPT_RIJNDAEL_256, SALT, $plaintext, MCRYPT_MODE_ECB,
mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),
MCRYPT_RAND))
Run Code Online (Sandbox Code Playgroud) 所以,标题基本上描述了我的问题.我的哈希:make()疯了.我创建了一个带有哈希密码的用户表,但我无法让Laravel接受我的凭据,我认为问题出在Hash :: make中.
所以,测试这段代码:
Route::get('/', function()
{
return Hash::make('1234');
});
Run Code Online (Sandbox Code Playgroud)
每当我点击路线'/'时,它就会给我一个不同的哈希值.
它对每个人都表现如此吗?有什么建议?我迷路了!
在火箭小费之后,我试过了
if(!Hash::check('1234', User::find(1)->password))
return 'not';
$credentials = array(
'email' => 'vitor.lobs@gmail.com',
'password' => '1234',
//'remember' => $remember
);
if(Auth::attempt($credentials))
{
return View::make('hello');
}
return "Invalid Credentials";
Run Code Online (Sandbox Code Playgroud)
但它不断返回"无效凭据".我已经仔细检查了我的auth.php,并且设置正确.还有什么我可以尝试的吗?
我正在使用CentOS 6和最新的phpMyAdmin(4.0.1.4),我注意到错误"mcrypt扩展名丢失.请检查您的PHP配置."
我继续跑了:
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Run Code Online (Sandbox Code Playgroud)
然后跑了:
yum install php-mycrypt
Run Code Online (Sandbox Code Playgroud)
然后重启httpd服务仍然没有运气.
知道我怎么能让它消失?
我能够在Mountain Lion上成功安装mcrypt扩展,但我很难在Mavericks上安装扩展.
作为参考,我遵循本指南:http://www.coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-9-mavericks-development-server/
我注意到的唯一不一致是通过php -v从命令行运行,我显示的是PHP版本5.3.15 - 而Web服务器似乎正在运行5.4.17. 我下载了5.4.17来编译mcrypt.
基本上,一切都按计划运行直到最后.我没有将共享扩展安装到新目录中/usr/lib/php/extensions/no-debug-non-zts-20100525,而是收到一条消息:
Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20090626/
编辑:
问题似乎是Web服务器的PHP使用模块API编译:20100525并且系统仍在使用5.3.15(这是API:20090626),因此出错.
我假设你不能(轻松)更新PHP的系统版本.要使模块和PHP API匹配,我需要做什么?
在此先感谢您的帮助.
我正在寻找使用Mcrypt的简单但加密强大的AES实现AES.
希望将其归结为一对简单的功能,$garble = encrypt($key, $payload)以及$payload = decrypt($key, $garble).
我知道在SO上有很多关于这个的问题,但没有一个能解决我的问题.我已经检查了他们提到的一切似乎表明mcrypt没问题,除非安装Laravel.显然我错过了一些东西.
当按照指示(composer create-project laravel/laravel myproj --prefer-dist)安装Laravel时,我在接近安装结束时收到错误"需要Mcrypt PHP扩展".
据我所知,mcrypt 已安装并启用.
作曲家使用 /usr/bin/env php
$ which composer
/usr/local/bin/composer
$ cat /usr/local/bin/composer
#!/usr/bin/env bash
/usr/bin/env php -d allow_url_fopen=On -d detect_unicode=Off /usr/local/Cellar/composer/1.0.0-alpha8/libexec/composer.phar $*%
Run Code Online (Sandbox Code Playgroud)
我的PATH上的php是来自MAMP的5.5.10
$ php --version
PHP 5.5.10 (cli) (built: Apr 10 2014 17:49:22)
$ which php
/Applications/MAMP/bin/php/php5.5.10/bin/php
Run Code Online (Sandbox Code Playgroud)
Mcrypt已安装并启用
$ php -m | grep mcrypt
mcrypt
$ php --info | grep mcrypt
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => …Run Code Online (Sandbox Code Playgroud) 我需要用于后续Crypt::encrypt()和Crypt::decrypt()调用的密钥,但仅限于当前请求.
Crypt::setKey('1');
$pin_code = Crypt::encrypt($pin_codes[$key]);
Run Code Online (Sandbox Code Playgroud)
//它进行加密然后自动注销
可能是什么问题?
mcrypt ×10
php ×9
encryption ×3
aes ×2
cryptography ×2
laravel ×2
linux ×2
macos ×2
centos ×1
composer-php ×1
eloquent ×1
fips ×1
hash ×1
installation ×1
laravel-4 ×1
mamp ×1
phpmyadmin ×1