Итак, я «случайно» генерирую две соли для использования с последующим шифрованием и хэшированием. Они создаются в процессе установки приложения и затем копируются в файл глобальной конфигурации с помощью:
file_put_contents()
Теперь, когда они сгенерированы, я могу просмотреть их в моем файле «globalParams.php». Они хранятся в виде значений массива, но этот массив вообще не используется в этом процессе установки.
Код для генерации выглядит следующим образом:
// Let's generate some encryption salts:
$options = [
'cost' => 12,
'salt' => mcrypt_create_iv(32, MCRYPT_DEV_URANDOM),];
$salt = password_hash(mt_rand(), PASSWORD_BCRYPT, $options);
$salt = password_hash($salt, PASSWORD_BCRYPT, $options);
$salt2 = password_hash(mt_rand(), PASSWORD_BCRYPT, $options);
$salt2 = password_hash($salt2, PASSWORD_BCRYPT, $options);
После этого они помещаются в файл конфигурации примерно так:
// Let's open up our template globalParams.php and replace some strings..
$editFile = file_get_contents('newGlobalParams.php');
$editFile = str_replace( "database_hostname", $hostname, $editFile );
$editFile = str_replace( "database_username", $dbUser, $editFile );
$editFile = str_replace( "database_password", $dbPass, $editFile );
$editFile = str_replace( "database_name", $database, $editFile );
$editFile = str_replace( "encryption_salt", $salt, $editFile );
$editFile = str_replace( "encryption_salt2", $salt2, $editFile );
// Replace the original globalParams.php now that the system is set up..
file_put_contents('../_includes/globalParams.php', $editFile);
И это пример выходных данных:
$parameters['main']['salt'] = "$2y$12$cLSGeEoau5/4NEZ3Fe8qquxwUBc6aL5fmcYUlQtavdoIY1L7NKnaG";
$parameters['main']['salt2'] = "$2y$12$cLSGeEoau5/4NEZ3Fe8qquxwUBc6aL5fmcYUlQtavdoIY1L7NKnaG2";
Почему они идентичны, но с добавлением 2?
При необходимости можно выложить больше кода, включая весь файл установщика.
Ta.
Редактировать:
Вот результаты, которые отражаются сразу после генерации:
$2y$12$uuZoLwioBePD9aDozrOJkus3e/DuShspaqKzzCDVne6BwVsyDkBA2
$2y$12$uuZoLwioBePD9aDozrOJkuicthSCvq2mpGTQlKNGZ.jLUUrfSDEq.
Значения сбрасываются в «globalParams.php»:
$parameters['main']['salt'] = "$2y$12$uuZoLwioBePD9aDozrOJkus3e/DuShspaqKzzCDVne6BwVsyDkBA2";
$parameters['main']['salt2'] = "$2y$12$uuZoLwioBePD9aDozrOJkus3e/DuShspaqKzzCDVne6BwVsyDkBA22";
Шаблон ‘globalParams.php’:
<?php
// Global configurations file
$parameters['dbC']['hostname'] = "database_hostname";
$parameters['dbC']['username'] = "database_username";
$parameters['dbC']['password'] = "database_password";
$parameters['dbC']['database'] = "database_name";
$parameters['main']['salt'] = "encryption_salt";
$parameters['main']['salt2'] = "encryption_salt2";
session_start(); // Start the session, ready for the user to login with.
putenv( "TZ=Europe/London" ); // Set the timezone for cookies and the sessions.
require_once('databaseFunctions.php');
require_once('coreFunctions.php');
if(file_exists('_install/')) { // Ensures no malicious user can reinstall the application using their own data..
exit( "Please delete the \"install\" directory." );
}
Проблема заключается в следующем:
$editFile = str_replace( "encryption_salt", $salt, $editFile );
$editFile = str_replace( "encryption_salt2", $salt2, $editFile );
Вы заменяете encryption_salt
в encryption_salt2
на первой замене.
Тогда вторая замена ничего не делает, потому что шаблон encryption_salt2
более не существует.
Flosculus уже ответил на ваш вопрос, но, тем не менее, я хотел бы указать на некоторые другие детали.
То, как вы генерируете «соли», очень дорого. Я не уверен, какова их цель, на самом деле есть четыре варианта:
Для хэширования паролей (случай 4) было бы лучше полностью пропустить параметр соли, password_hash () Затем автоматически сгенерирует безопасную соль для каждого пароля. Абсолютно ненужным и вредным для ваших серверов является использование растяжения ключа для соли, одна и та же соль не должна использоваться для более чем одного пароля, и вы теряете энтропию, создавая ее таким образом.
То же самое касается шифрования. Если вам нужен ключ (случай 1), просто сгенерируйте несколько случайных байтов и используйте bin2hex () для хранения их для чтения в файле конфигурации. Если вам нужен IV (случай 2), вы должны сгенерировать его для каждого текста, который вы хотите зашифровать, и сохранить его со своей зашифрованной строкой. IV не должен использоваться для более чем одной зашифрованной строки.