Имитация MySql OLD_PASSWORD в .NET или MS SQL? - PullRequest
2 голосов
/ 07 августа 2009

Я запустил новый проект в .NET, который использует базу данных какой-то старой системы в MySql. Данные, хранящиеся в mysql, периодически передаются в MS Sql, на котором работает наша система. Мне нужно аутентифицировать пользователей по их логину и паролю. Пароли пользователя хранятся в виде хэша, сгенерированного функцией OLD_PASSWORD из mysql. Есть ли способ сгенерировать такой хэш с помощью Ms Sql или .NET?

Ответы [ 2 ]

4 голосов
/ 03 марта 2011

Я нашел один в http://www.yourhelpcenter.de/2009/06/mysql-alten-md5-hash-in-c-berechnen-16-stellig/

public static string mysql_old_password(string sPassword)
{
    UInt32[] result = new UInt32[2];
    bool bDebug = false;
    UInt32 nr = (UInt32)1345345333, add = (UInt32)7, nr2 = (UInt32)0x12345671;
    UInt32 tmp;

    char [] password = sPassword.ToCharArray();
    int i;

    for (i = 0; i < sPassword.Length; i++)
    {
        if (password[i] == ' ' || password[i] == '\t')
            continue;

        tmp = (UInt32)password[i];
        nr ^= (((nr & 63) + add) * tmp) + (nr << 8);
        nr2 += (nr2 << 8 ) ^ nr;
        add += tmp;
    }

    result[0] = nr & (((UInt32)1 << 31) - (UInt32)1);
    UInt32 val = (((UInt32)1 << 31) - (UInt32)1);
    result[1] = nr2 & val;
    string hash = String.Format("{0:X}{1:X}", result[0], result[1]);
    return hash.ToLower();
}
0 голосов
/ 09 августа 2009

Здесь - это модуль Perl, который эмулирует функцию MySQL password() как для 4.0, так и для предыдущих версий (теперь это OLD_PASSWORD() функция) и для 4.1 и выше.

Хотя я понимаю, что это не .NET :-), это единственный кусок кода (кроме исходного кода MySQL), который я нашел, когда искал это, хотя мне нужно было реализовать Java. Это сработало для меня и помогло с миграцией - возможно, вы сможете перенести его на .NET или запустить как внешний процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...