我正在尝试使用来自php和密码Rijndael的mcrypt加密一些文本消息,但我不确定MCRYPT_MODE_modename(根据PHP的手册,这些是可用的"ecb","cbc","cfb","ofb"," nofb"或"stream"但我读到的确实还有一些).我不知道每个人做什么或如何使用它们.
我读了两件事,不应该使用ECB模式,也不要使用MCRYPT_RAND.他们没有解释原因.对于ECB模式,我想这是因为它总是为相同的纯文本生成相同的加密输出(可能这可以用于攻击),不知道MCRYPT_RAND(@azz 在这里提到).
我的问题是,我应该使用什么样的mcrypt模式,看到使用它的php代码的例子会很棒,因为我找到的所有例子都使用了ECB.我试图加密的字符串将只包含ascii文本和可变长度,不大于500个字符.
这是一个加密和解密数据的PHP演示脚本:
<?
$encryptionkey = 'h8y2p9d1';
$card_nbr = "1234";
echo "original card_nbr: $card_nbr <br>\n";
$card_nbr_encrypted=encrypt_data($card_nbr);
echo "card_nbr_encrypted: $card_nbr_encrypted <br>\n";
$card_nbr_decrypted=decrypt_data($card_nbr_encrypted);
echo "card_nbr_decrypted: $card_nbr_decrypted <br>\n";
$len=strlen($card_nbr_decrypted);
echo "length: $len <br>\n";
function encrypt_data($text){
global $encryptionkey;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$encrypted_text = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $encryptionkey, $text, MCRYPT_MODE_ECB, $iv);
return $encrypted_text;
}
function decrypt_data($text){
global $encryptionkey;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$decrypted_text = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $encryptionkey, $text, MCRYPT_MODE_ECB, $iv);
return $decrypted_text;
}
?>
Run Code Online (Sandbox Code Playgroud)
输出是:
original card_nbr: 1234
card_nbr_encrypted: vY¨(Z$<§G3-žÃ-Éù3Ý2Ê×rz¨VÛ
card_nbr_decrypted: …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用该函数创建一个IV:
mcrypt_create_iv(32, MCRYPT_DEV_RANDOM)
Run Code Online (Sandbox Code Playgroud)
这会导致脚本超过60秒后超时.(也许更多?)但是当我使用时URANDOM,它几乎可以立即正常工作.从我读到的它应该需要大约4秒钟MCRYPT_DEV_RANDOM,但它肯定需要太长时间.错误日志中没有任何内容.
我在ubuntu 12.04服务器上安装了apache2和php5.
我在我的centos服务器上运行完全相同的代码没有问题.
我需要提高我们网站的安全性,目前正在使用这里的指南:http://crackstation.net/hashing-security.htm,以及随机密码的生成:https://defuse.ca/generating -random-passwords.htm.我收集到两者都使用函数mcrypt_create_iv()生成随机字节(或位?),但由于某种原因,我在CentOS 6下安装php-mcrypt时遇到错误.幸运的是,第一个链接说openssl_random_pseudo_bytes()是CSPRNG(以及PHP文档和其他来源也支持该声明),并且可以在PHP 5.4的当前服务器安装上使用,因此我别无选择,只能使用它.考虑到这些,我想问以下问题:
直接代码替换是否足以影响安全性?(也就是说,只是将呼叫替换mcrypt_create_iv()为openssl_random_pseudo_bytes()会这样做?)
关于代码中提到的常量(http://crackstation.net/hashing-security.htm#properhashing),指南说"确保你的盐至少和哈希函数的输出一样长." 我是否正确地假设PBKDF2_SALT_BYTES并且PBKDF2_HASH_BYTES都被设置为24字节,因为pbkdf2()函数的输出将只是24字节,而不是32(对于256位),因为使用的基础算法是sha256?(是的,我也在使用键拉伸.)在相关的说明中,是24字节,或者应该增加/减少,这会产生什么影响?
感谢那些愿意回答的人.
我正在尝试在我的mac上安装PHP的mcrypt扩展.
我用homebrew命令安装它
brew install php53-mcrypt
Run Code Online (Sandbox Code Playgroud)
这给了我一条消息说它已经安装: php53-mcrypt-5.3.26 already installed
但是,当我运行命令时php -m,我没有在列表中看到mcrypt(我已经重新启动了终端).
编辑1:添加php.ini.default的mcrypt部分
在php.ini.default文件中,这是我关于mcrypt的部分
[mcrypt]
; For more information about mcrypt settings see http://php.net/mcrypt-module-open
; Directory where to load mcrypt algorithms
; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
;mcrypt.algorithms_dir=
; Directory where to load mcrypt modes
; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt)
;mcrypt.modes_dir=
Run Code Online (Sandbox Code Playgroud) 我跑composer update了一个Laravel应用程序,现在我收到这个错误:
mcrypt_decrypt():IV参数必须与块大小一样长
发生了什么?!
我已经将我的Mac OS X更新为Yosemite,但是这样做我写了我所有的开发环境.所以现在,要在我的本地apache上运行Laravel 4,我需要安装Mcrypt扩展,但是我尝试过的所有内容都失败了.甚至是OS X Mavericks上的步骤(10.9)
有人有同样的问题吗?提前致谢.
干杯
运行OSX 10.10.1.我安装了自制软件,然后尝试运行以下命令:
brew install mcrypt
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)
在终端运行php -v:
PHP 5.6.2 (cli) (built: Nov 2 2014 09:34:41)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.5, Copyright (c) 2002-2014, by Derick Rethans
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏.在OSX Yosemite中,一切似乎都在破碎......
就在今天,我注册了Google Cloud Compute Engine.我做了一切,但后来我在安装php5-mcrypt扩展时遇到了错误.错误:
root@instance-2:~# sudo apt-get install php5-mcrypt
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
php5-mcrypt : Depends: phpapi-20121212 …Run Code Online (Sandbox Code Playgroud) 这就是我一直在做的事情。
$ sudo apt-get -y install gcc make autoconf libc-dev pkg-config
$ sudo apt-get -y install libmcrypt-de
$ sudo pecl install mcrypt-1.0.2
> libmcrypt prefix? [autodetect] :
Run Code Online (Sandbox Code Playgroud)
我将“extension=mcrypt.so”添加到 php.ini
那我就做
sudo bash -c "echo extension=/usr/lib/php/20190902/mcrypt.so > /etc/php/7.2/cli/conf.d/mcrypt.ini"
sudo bash -c "echo extension=/usr/lib/php/20190902/mcrypt.so > /etc/php/7.2/apache2/conf.d/mcrypt.ini"
Run Code Online (Sandbox Code Playgroud)
我遵循了这些说明:https://lukasmestan.com/install-mcrypt-extension-in-php7-2/
最后我检查一下php -i | grep mcrypt
这是我的输出:
PHP Warning: PHP Startup: mcrypt: Unable to initialize module
Module compiled with module API=20190902
PHP compiled with module API=20180731
These options need to match
in Unknown on …Run Code Online (Sandbox Code Playgroud) mcrypt ×10
php ×8
encryption ×2
laravel ×2
macos ×2
aes ×1
cryptography ×1
homebrew ×1
openssl ×1
server ×1
ubuntu ×1
ubuntu-18.04 ×1