Pbkdf2
Rfc2898DeriveBytes.Pbkdf2
принимает пароль, соль, число
итераций, HashAlgorithmName.SHA256
и длину ключа. С теми же входами,
что у
Rfc2898DeriveBytes,
результат совпадает с GetBytes.
Синтаксис
byte[] key = Rfc2898DeriveBytes.Pbkdf2(
password, salt, iterations,
HashAlgorithmName.SHA256, 32);
Пример
Давайте сравнить Pbkdf2 и GetBytes:
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] salt = Encoding.UTF8.GetBytes("12345678");
byte[] fromStatic = Rfc2898DeriveBytes.Pbkdf2(
"abcde", salt, 1,
HashAlgorithmName.SHA256, 32);
byte[] fromObject = new Rfc2898DeriveBytes(
"abcde", salt, 1, HashAlgorithmName.SHA256)
.GetBytes(32);
bool res = fromStatic.SequenceEqual(fromObject);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте сравнить два вызова Pbkdf2:
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] salt = Encoding.UTF8.GetBytes("12345678");
byte[] first = Rfc2898DeriveBytes.Pbkdf2(
"abcde", salt, 1,
HashAlgorithmName.SHA256, 32);
byte[] second = Rfc2898DeriveBytes.Pbkdf2(
"abcde", salt, 1,
HashAlgorithmName.SHA256, 32);
bool res = first.SequenceEqual(second);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте сравнить ключи для другого пароля:
using System;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
byte[] salt = Encoding.UTF8.GetBytes("12345678");
byte[] first = Rfc2898DeriveBytes.Pbkdf2(
"abcde", salt, 1,
HashAlgorithmName.SHA256, 32);
byte[] second = Rfc2898DeriveBytes.Pbkdf2(
"12345", salt, 1,
HashAlgorithmName.SHA256, 32);
bool res = first.SequenceEqual(second);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Смотрите также
-
Rfc2898DeriveBytes,
класс вывода -
Key,
ключ шифра -
Aes,
AES -
CryptoStream,
поток шифра