Member 12561559 Ответов: 0

Как зашифровать строку, чтобы она была совместима с паролем drupal V 7


Привет, надеюсь, кто-нибудь сможет помочь.

У меня есть, чтобы обновить данные пользователя в среде Друпал, MySQL из приложения VB.NET /АСП.

Таким образом, пользователь меняет свой пароль с помощью классического ASP, это вызывает .COM-совместимый DLL-класс, написанный в VB.NET

В инструкции я нашел несколько:

Here is an example hash from Drupal 7:

"pass" : "$S$Dxl65W9p07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS"

The characters 0-2 are the type ( $S$ is Drupal 7 )

The character 3 is the number of log2 rounds (X) based on the position of the char in this list: './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' So in our example 'D' would map to 15
The characters 4-11 are the SALT
The rest is a SHA512 hash using 2^X rounds.
The binary result is then converted to a string using base64.

$count = 1 << $count_log2;
$hash = hash($algo, $salt . $password, TRUE);
do { $hash = hash($algo, $hash . $password, TRUE);
} while (--$count);


Не будучи криптографом какого-либо рода, я обнаружил, что шифрую строку в SHA512 с помощью VB.NET я могу использовать этот код:

Private Function EncryptSHA512Managed(ByVal ClearString As String) As String
      Dim uEncode As New UnicodeEncoding()
      Dim bytClearString() As Byte = uEncode.GetBytes(ClearString)
      Dim sha As New System.Security.Cryptography.SHA512Managed()
      Dim hash() As Byte = sha.ComputeHash(bytClearString)
      Dim Z as Integer = 0

       For Z = 1 To HowManyTimes - 1
          hash2 = sha.ComputeHash(hash)
          hash = hash2
      Next

      Return Convert.ToBase64String(hash2)
  End Function


Итак, из того, что я понимаю о объяснении PHP (а я никогда не использовал PHP) Я бы сделал что-то вроде этого:

  Private Function EncryptionStringForDrupal() As String
        Dim EncStr As String = "apassword"
      
' Going to use TestSale as my salt test.

        Return "$S$DTestSalt" & EncryptSHA512Managed("TestSalt" & EncStr)

    End Function


С буквой "D" в Примере PHP-текста это 15^2, и он выходит как 32 768 циклов шифрования, а результирующий зашифрованный пароль drupal выходит как

$S$DTestSaltTjmIXDexvVOnQDA4ojamH2Pfxvrfikjljbkntclzaxs/LHiF8Wxx2kMb03qeo+FUK7prxEiKfToY50ZG0SQ3QA==

Но это все равно неправильно -

Что я уже пробовал:

Бился головой о стену, но это ничего не решало.

Patrice T

15^2 означает 15*15, так что это не 32768, а 225.

Richard Deeming

Судя по остальному описанию, это опечатка в вопросе - ОП имел в виду 2^15, нет 15^2. :)

Member 12561559

Спасибо и да, я неправильно понял ценности, спасибо Патрис! Итак, если его 2^15, то это 32768 раз? Вот что говорит ^ calc?

Richard Deeming

NB: Если "D" соответствует 15, то "." карты к 0, нет 1. :)

2^0 = 1 таким образом, с помощью". " вы будете хэшировать значение только один раз, что не будет особенно безопасным.

Вы также забыли добавить соль в последнюю строку.

Member 12561559

Обновил свой вопрос, чтобы включить предложенные изменения, но все равно не повезло :(

0 Ответов