Как членство ASP.NET генерирует свой ключ соли, а затем как они кодируют его (то есть, это соль + пароль или пароль + соль)?
Я использую SHA-1 с моим членством, но я хотел бы воссоздать те же соли, чтобы встроенный элемент принадлежности мог хешировать вещи так же, как мои вещи могут.
Изменить 2: Ничего. Я неправильно понял и думал, что он сказал байты, а не бит. Таким образом, я проходил 128 байтов, а не 128 бит.
Изменить: Я пытался это сделать. Это то, что у меня есть,
public string EncodePassword(string password, string salt)
{
byte[] bytes = Encoding.Unicode.GetBytes(password);
byte[] src = Encoding.Unicode.GetBytes(salt);
byte[] dst = new byte[src.Length + bytes.Length];
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
byte[] inArray = algorithm.ComputeHash(dst);
return Convert.ToBase64String(inArray);
}
private byte[] createSalt(byte[] saltSize)
{
byte[] saltBytes = saltSize;
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetNonZeroBytes(saltBytes);
return saltBytes;
}
Итак, я не пытался узнать, узнает ли членство ASP.NET, но хешированный пароль выглядит близко. Я просто не знаю, как преобразовать его в base64 для соли.
Я сделал это
byte[] storeSalt = createSalt(new byte[128]);
string salt = Encoding.Unicode.GetString(storeSalt);
string base64Salt = Convert.ToBase64String(storeSalt);
int test = base64Salt.Length;
Длина теста равна 172, что намного превышает 128 бит, так что я делаю неправильно?
Это их соль выглядит как
vkNj4EvbEPbk1HHW+K8y/A==
Это то, что моя соль выглядит как
E9oEtqo0livLke9+csUkf2AOLzFsOvhkB/NocSQm33aySyNOphplx9yH2bgsHoEeR/aw/pMe4SkeDvNVfnemoB4PDNRUB9drFhzXOW5jypF9NQmBZaJDvJ+uK3mPXsWkEcxANn9mdRzYCEYCaVhgAZ5oQRnnT721mbFKpfc4kpI=