public string HashPassword(string password)
{
byte[] salt;
byte[] buffer2;
if (password == null)
{
throw new ArgumentNullException(nameof(password));
}
using (var bytes = new Rfc2898DeriveBytes(password, 0x10, 0x3e8))
{
salt = bytes.Salt;
buffer2 = bytes.GetBytes(0x20);
}
var dst = new byte[0x31];
Buffer.BlockCopy(salt, 0, dst, 1, 0x10);
Buffer.BlockCopy(buffer2, 0, dst, 0x11, 0x20);
return Convert.ToBase64String(dst);
});
Каждый раз выдает разные хеши, но как тогда проверить два пароля один из базы где храниться хешированным этим методом и один с пользователя
даже переменные salt
разные при каждом вызове
Этот код c# с сервера где не мы это делали, и нам на своем сервер на python\django нужно проверить посредством python полученный хеш с сервера на c#, для это я нашел либу pbkdf2
from pbkdf2 import PBKDF2
import base64
password_hash=b"ACNLVsim8ADv4Su/8w4loeSwTw2yH2R3++Pvrfx5xlDGlx0cDRdQ9t0TLJd1a5pvZw=="
password = b"123456"
# Соль
origin_salt = base64.b64decode(password_hash)[1:16]
print(base64.b64encode(origin_salt))
# > I0tWyKbwAO/hK7/zDiWh
buffer1 = base64.b64decode(password_hash)[17:]
print(base64.b64encode(buffer1))
# > sE8Nsh9kd/vj7638ecZQxpcdHA0XUPbdEyyXdWuab2c=
current_password_hash = PBKDF2(password, origin_salt, 1000)
# Соль
print(base64.b64encode(current_password_hash._PBKDF2__salt))
# > I0tWyKbwAO/hK7/zDiWh
print(base64.b64encode(current_password_hash.read(49)[17:]))
# > 0lC99e4tV+JmXBbJal19YyS1h9+djY+dsBHo/j8KNb8=
выдает одинаковые значение при каждом вызове, не то что на c#
C#
код каждый раз создает разный salt
(случайный), по этому пароли каждый раз другие. Вам нужно прочесть первые 16 байт пароля с C#
(здесь записан
salt
), и подставить в python
. Потом проверить оставшиеся 32 байта.
Все получилось, оказывается мы пытались взять 32 байта срезом, а надо было генерить только на 32 байт и этот сравнивать с buffer2 с с# Спасибо большое @Zergatul
from pbkdf2 import PBKDF2
import base64
password_hash = b"AFBYUNpzMbvIHJWLmleAXWITetOsWOuma+FuPdV7fXogYM/8CVKtGygqzoWam14YXg=="
password = b"123456"
# оригинальный Соль
salt64 = base64.b64decode(password_hash)[1:17]
print(base64.b64encode(salt64))
# > UFhQ2nMxu8gclYuaV4BdYg==
# оригинальный буфер
buffer1 = base64.b64decode(password_hash)[17:]
print(base64.b64encode(buffer1))
# > E3rTrFjrpmvhbj3Ve316IGDP/AlSrRsoKs6FmpteGF4=
key = PBKDF2(password, salt64).read(32) #
print(base64.b64encode(key))
# > E3rTrFjrpmvhbj3Ve316IGDP/AlSrRsoKs6FmpteGF4=
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сделал свою шапку для окна, и хочу добавить туда стандартные кнопки "свернуть", "развернуть", и "закрыть"Всё как бы хорошо, но при развертывании...