Поскольку в комментариях, о которых вы упомянули, вы скорее после того, как хранится соль, я предполагаю, что у вас есть EF, указывающий на Application A
членство в БД, и сосредоточьтесь на этом бите хеширования. Я предполагаю, что вы используете UserManager
a> для управления вашими паролями.
Если вы посмотрите, как создаются пароли хранится и verified, вы заметите, что обе операции в конечном итоге полагаются на PasswordHasher
для выполнения задания. Это зависимость, внедренная в ваш UserManager фреймворком и просматривающая реализацию:
private static byte[] HashPasswordV3(
string password,
RandomNumberGenerator rng,
KeyDerivationPrf prf,
int iterCount,
int saltSize,
int numBytesRequested)
{
byte[] numArray1 = new byte[saltSize];
rng.GetBytes(numArray1);
byte[] numArray2 = Microsoft.AspNetCore.Cryptography.KeyDerivation.KeyDerivation.Pbkdf2(password, numArray1, prf, iterCount, numBytesRequested);
byte[] buffer = new byte[13 + numArray1.Length + numArray2.Length];
buffer[0] = (byte) 1;
PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 1, (uint) prf); // hash type
PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 5, (uint) iterCount); // number of iterations
PasswordHasher<TUser>.WriteNetworkByteOrder(buffer, 9, (uint) saltSize); // salt size (although not configurable in this implementation)
Buffer.BlockCopy((Array) numArray1, 0, (Array) buffer, 13, numArray1.Length); // salt goes here
Buffer.BlockCopy((Array) numArray2, 0, (Array) buffer, 13 + saltSize, numArray2.Length); // password hash goes here
return buffer; // this gets Base64-encoded upstream
}
похоже, что соль — это просто случайный 16-байтовый массив, который сохраняется вместе с hash
, hashing function
и number of iterations used
, поэтому хэши, созданные одним приложением, должны быть доступны для чтения другим без дополнительной работы от вашего имени, если PasswordHasherCompatibilityMode
и генерирующая ОС такой же.
Здесь следует отметить еще одну вещь, поскольку PasswordHasher
— это с внедрением зависимостей, вы можете заменить его собственной реализацией, если это необходимо. Надеюсь, вы покопаетесь в PasswordHasher
. предоставляет вам достаточно контекста.
person
timur
schedule
21.02.2020
Application B
на базу данных ASP.NET MembershipApplication A
? Я полагаю, что в вашем проекте может быть несколькоDbContexts
и строк подключения. - person timur   schedule 19.02.2020