Мои сгенерированные соли одинаковы

0

Итак, я "произвольно" генерирую две соли для использования с последующим шифрованием и хешированием. Они генерируются во время процесса установки приложения, а затем копируются в файл глобальных конфигураций через:

file_put_contents()

Теперь, когда они сгенерированы, я могу просмотреть их в файле 'globalParams.php'. Они сохраняются как значения массива, но этот массив не используется вообще в этом процессе установки.

Код для генерации выглядит следующим образом:

// Let 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 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." );

}
  • 0
    Где вы поместили значения в массив $ parameters?
  • 0
    Выведите значения до того, как они будут выгружены в файл. Также покажите нам шаблон файла, в который вы их помещаете.
Показать ещё 2 комментария
Теги:
encryption
hash
salt

2 ответа

3
Лучший ответ

Проблема заключается в следующем:

$editFile = str_replace( "encryption_salt", $salt, $editFile );
$editFile = str_replace( "encryption_salt2", $salt2, $editFile );

Вы заменяете encryption_salt в encryption_salt2 при первой замене.
Тогда вторая замена ничего не делает, потому что шаблон encryption_salt2 больше не существует.

  • 0
    Я уже изменил его на «encryption2_salt» перед вашим постом, потому что я думал, что это может быть проблемой, но я все еще испытываю тот же тип поведения ... Редактировать: поцарапать, у меня было еще 2 после того, как изменил его , Удаление этого и сохранение файла снова отсортировало его. Спасибо!
0

Флокулус уже ответил на ваш вопрос, но тем не менее я хотел бы указать на некоторые другие детали.

То, как вы создаете "соли", очень дорого. Я не уверен, какова их цель, на самом деле есть четыре возможности:

  1. Используется как ключ для шифрования
  2. Используется как IV для шифрования
  3. Используется как ключ/перец для хеширования паролей
  4. Используется как соль для хеширования паролей

Для хэш-паролей (случай 4) было бы лучше полностью оставить параметр соли, пароль_hash() автоматически генерирует безопасную соль для каждого пароля. Это абсолютно не нужно и плохо для ваших серверов, чтобы использовать ключевое растяжение для соли, та же соль не должна использоваться для более чем одного пароля, и вы теряете энтропию, создавая ее таким образом.

То же самое касается шифрования. Если вам нужен ключ (случай 1), то просто сгенерируйте некоторые случайные байты и используйте bin2hex() для хранения их читаемых в файле конфигурации. Если вам нужен IV (случай 2), вы должны сгенерировать его для каждого текста, который вы хотите зашифровать, и сохранить его зашифрованной строкой. IV не следует использовать для более чем одной зашифрованной строки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню