, надеюсь, кто-то может помочь.
Мне необходимо обновить данные пользователя в среде 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 *