我已经成功安装了mcrypt
via,homebrew
但我很难找到将mcrypt.so
其作为扩展包含在其中的路径php.ini
.
mcrypt安装在/usr/local/Cellar/mcrypt/2.5.8
.树:
-- AUTHORS
|-- ChangeLog
|-- INSTALL_RECEIPT.json
|-- NEWS
|-- README
|-- TODO
|-- bin
| `-- libmcrypt-config
|-- include
| |-- mcrypt.h
| `-- mutils
| `-- mcrypt.h
|-- lib
| |-- libmcrypt.4.4.8.dylib
| |-- libmcrypt.4.dylib -> libmcrypt.4.4.8.dylib
| `-- libmcrypt.dylib -> libmcrypt.4.4.8.dylib
`-- share
|-- aclocal
| `-- libmcrypt.m4
`-- man
`-- man3
`-- mcrypt.3
Run Code Online (Sandbox Code Playgroud)
我想包括mcrypt.h
在php.ini
:
extension="/usr/local/Cellar/mcrypt/2.5.8/include/mcrypt.h"
Run Code Online (Sandbox Code Playgroud)
然后重新启动apache.但它不起作用.
当我在终端中运行php时,我得到:
PHP Warning: PHP Startup: …
Run Code Online (Sandbox Code Playgroud) 我一直收到这个错误
需要Mcrypt PHP扩展
在我运行之后在底部composer update
:
由于我使用的是Mac,我尝试过运行:
brew search mcrypt
brew install php56-mcrypt
我仍然得到相同的错误消息.
重新安装我们的服务器后,MCRYPT
不再工作,PHP发出通知
使用未定义的常量
MCRYPT_BLOWFISH
(Apache 2.4
,PHP 5.5
).
php -m返回mcrypt.
Run Code Online (Sandbox Code Playgroud)ls -al /etc/php5/apache2/conf.d/ 20-mcrypt.ini -> ../../mods-available/mcrypt.ini cat /etc/php5/mods-available/mcrypt.ini ; configuration for php MCrypt module extension=mcrypt.so
为什么mcrypt
不被认可?我怎样才能做到这一点?
从PHP 7.1.0开始,Mcrypt函数已被弃用.
我弃用的字符串编码/解码函数:
$key: secret key
$str: string
$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));
$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
Run Code Online (Sandbox Code Playgroud)
你能提出一些替代方案吗?
我已经要求系统管理员在服务器上安装mcrypt,他们说一切正常.但是当我运行我的简单脚本时,我得到了这个.
警告:mcrypt_get_iv_size()[function.mcrypt-get-iv-size]:模块初始化失败
它来自这条线:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)
现在,从这段代码:
$algorithms = mcrypt_list_algorithms("/usr/local/bin/mcrypt");
foreach ($algorithms as $cipher) {
echo "$cipher<br />\n";
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
警告:mcrypt_list_algorithms()[function.mcrypt-list-algorithms]:在模块目录中找不到算法
当我运行这个:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
foreach ($modes as $mode) {
echo "$mode <br />\n";
}
Run Code Online (Sandbox Code Playgroud)
我明白了:
警告:mcrypt_list_modes()[function.mcrypt-list-modes]:在模块目录中找不到模式
但是,运行此命令时此命令
which mcrypt; mcrypt -v
Run Code Online (Sandbox Code Playgroud)
生产:
/usr/local/bin/mcrypt
Mcrypt v.0.9.9 (x86_64-unknown-linux-gnu)
Linked against libmcrypt v.2.5.7
Copyright (C) 1998-2002 Nikos Mavroyanopoulos (nmav@gnutls.org)
Run Code Online (Sandbox Code Playgroud)
是否已正确安装/配置mcrypt?
更新:
我这样做了:
whereis libmcrypt
Run Code Online (Sandbox Code Playgroud)
......得到了结果:
libmcrypt: /usr/local/lib/libmcrypt /usr/local/lib/libmcrypt.so /usr/local/lib/libmcrypt.la
Run Code Online (Sandbox Code Playgroud)
我也改变了:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
Run Code Online (Sandbox Code Playgroud)
至...
$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
$algorithms …
Run Code Online (Sandbox Code Playgroud) 由于Mcrypt已被弃用,我想在我的代码中使用OpenSSL,因为我们已经在我们的服务器中使用了PHP 7.0.17并且没有告诉他们何时升级它.
某些第三方API(可能在PHP 5.x上托管并使用mcrypt)正在使用加密数据.他们提供了用于加密/解密字符串的方法.
他们是这样的
$secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c' ;
public function encrypt128($str)
{
$block = mcrypt_get_block_size("rijndael_128", "ecb");
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB));
}
public function decrypt128($str)
{
$str = base64_decode($str);
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB);
$len = strlen($str);
$pad = ord($str[$len - 1]);
return substr($str, 0, strlen($str) - $pad);
}
Run Code Online (Sandbox Code Playgroud)
small1
如果加密,使用这些方法字符串v7IXp5vVaFVXXlt/MN8BVw==
我们希望openssl_encrypt
在我们这边使用,如果我们用OpenSSL加密相同的字符串,它必须给出与Mcrypt相同的结果.我研究过使用rijndael-128模式的mcrypt ecb应该与OpenSSL兼容aes-128-ecb
. …
我正在使用PJSIP开源库进行AES加密.用于AES加密的库不是C编程中可用的内置库.所以,我已经使用外部库(Libmcrypt)进行AES加密.
我按照这个站点将libmcrypt库构建到我的机器(MAC OSX)中. https://coolestguidesontheplanet.com/install-mcrypt-php-mac-osx-10-10-yosemite-development-server/
https://gist.github.com/bricef/2436364
在构建这些库时,它在/ usr/local/lib / path中创建了一个动态库(libmcrypt.dylib).当使用lipo -info libmcrypt.dylib命令检查该库的体系结构时,它显示
Non-fat file: libmcrypt.dylib is architecture: x86_64
Run Code Online (Sandbox Code Playgroud)
但我正在使用PJSIP 为Android和IOS设备创建这些应用程序.他们的架构是armeabi(android)和armv7(IOS).
将libmcrypt.dylib(x86_64)链接到PJSIP库(armv7)时,会显示以下错误.
Undefined symbols for architecture armv7:
"_mcrypt_enc_get_block_size", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic_deinit", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_generic_init", referenced from:
_encrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
_decrypt_AES in libpjsip-armv7-apple-darwin_ios.a(aes.o)
"_mcrypt_module_close", referenced from:
_encrypt_AES in …
Run Code Online (Sandbox Code Playgroud) 我在这堂课中有点奇怪:
<?php
namespace lib;
/**
* Short description of Crypt
*
* @author xxxx
* @package
*/
class Encryption
{
/**
* Short description of _ch
* handle to the mcrypt resource
*
* @access private
* @var $_ch
*/
private $_ch;
/**
* Short description of __construct
*
* @access public
* @author xxxx
* @param
* @return void
*/
public function __construct( $keyData = NULL, $algorithm = \MCRYPT_RIJNDAEL_256, $mode = MCRYPT_MODE_ECB, $encLibPath = '', $modeDir = '' ) …
Run Code Online (Sandbox Code Playgroud) 对于给定的$ key,$ message和$ iv,我有这个mcrypt_encrypt调用:
$string = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
Run Code Online (Sandbox Code Playgroud)
我想将mcrypt_encrypt
呼叫改为$key
一个,以便将来证明这一点.
通过具有$message
或$iv
和mcrypt_encrypt
我得到的更多的类似的反应,但不完全相同.还有其他方法可以称之为完美匹配吗?
我正在为lorem-ipsum openssl_encrypt
+ $mode = 'des-ede3-cbc'
组合得到这个(base64_encoded),所以我开始相信一个函数或另一个函数在加密前稍微填充消息...
对于mcrypt
"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBfjug2GLX7uo ="
为了openssl
"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBvte4swdttHY ="
尝试使用$ options传递OPENSSL_ZERO_PADDING,但传递除1 之外的任何内容(OPENSSL_RAW_DATA或true)会导致空字符串...
既不使用$mode = '3DES';
也不$options = true
工作... :(
还有其他线索吗?我正在使用"OpenSSL 1.0.2g 2016年3月1日".
已经读过这个 q&a,但它对我没有帮助.不是唯一 一个有填充问题的人,但到目前为止还没有解决方案.(第二个答案谈到添加填充到mcrypt调用,我真的想从openssl加密调用中删除填充...