Строка кодирования VB.NET в строку поля пароля, совместимую с drupal7 - PullRequest
0 голосов
/ 31 января 2019

, надеюсь, кто-то может помочь.

Мне необходимо обновить данные пользователя в среде MySQL Drupal из приложения VB.NET / ASP.

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

Вот инструкции, которые я нашел: (находится на этом сайте)

Вот пример хеша из Drupal 7:

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

Символы 0-2 - это тип ($ S $ - это Drupal 7)

Символ 3 - это числоlog2 раундов (X), основанных на положении символа в этом списке: './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' Так что в нашем примере 'D' будет соответствовать 15 символов 4-11 - это СОЛЬ Остальные 2, использующие SHA512 имеютХ раундов.Затем двоичный результат преобразуется в строку с использованием base64.

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

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

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 ==

, но все равно неправильно 10 * 10 *

...