Как зашифровать строку, чтобы она была совместима с паролем 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
Обновил свой вопрос, чтобы включить предложенные изменения, но все равно не повезло :(