Как создать уникальную строку из электронной почты или имени пользователя - PullRequest
0 голосов
/ 28 мая 2018

Я хочу создать метод в c #, который будет принимать мой уникальный адрес электронной почты или имя пользователя и будет возвращать мне уникальную строку, такую ​​же, как идентификатор видео YouTube (https://www.youtube.com/watch?v=_MSYfOYFF14). Я не могу просто использовать GUID, потому что я хочу сгенерироватьуникальная строка для каждого пользователя, и она будет оставаться той же для каждого пользователя каждый раз, когда я нажимаю на этот метод. Так возможно ли это в любом случае?

Ответы [ 3 ]

0 голосов
/ 28 мая 2018

1) Использование MD5 для получения байтового массива

2) Преобразование байтового массива в строку

3) Удаление двух последних символов

    using System.Security.Cryptography; 
    //...
    private string GenerateUniqueString(string input )
    {
        using (MD5 md5 = MD5.Create())
        {
            byte[] hash = md5.ComputeHash(Encoding.Default.GetBytes(input));
            var res = Convert.ToBase64String(hash);
            return res.Substring(0, res.Length - 2);    
        }
    }
0 голосов
/ 28 мая 2018

Простой пример хеширования нескольких строк.

public static string Hash(bool caseInsensitive, params string[] strs)
{
    using (var sha256 = SHA256.Create())
    {
        for (int i = 0; i < strs.Length; i++)
        {
            string str = caseInsensitive ? strs[i].ToUpperInvariant() : strs[i];
            byte[] bytes = Encoding.UTF8.GetBytes(str);
            byte[] length = BitConverter.GetBytes(bytes.Length);
            sha256.TransformBlock(length, 0, length.Length, length, 0);
            sha256.TransformBlock(bytes, 0, bytes.Length, bytes, 0);
        }

        sha256.TransformFinalBlock(new byte[0], 0, 0);
        var hash = sha256.Hash;
        return Convert.ToBase64String(hash);
    }
}

Существует параметр caseInsensitive, потому что foo@bar.com эквивалентно foo@BAR.COM (и довольно часто FOO@bar.com эквивалентно всемих).Обратите внимание, как я кодирую строки: перед каждой строкой я добавляю длину кодированной строки (в UTF8).Таким образом, "Hello", "World" отличается от "Hello World", потому что один будет преобразован во что-то похожее на 5Hello5World, а другой будет "11Hello World".

Usange:

string base64hash = Hash(true, "Donald Duck", "donaldduck@disney.com");

Обратите внимание, что благодаря ключевому слову params метод Hash может принимать любое количество (string) параметров.

0 голосов
/ 28 мая 2018

Если он не подвергается воздействию кого-либо еще, он может быть читаемым человеком.Заявлено, что имя пользователя или пароль уникальны, это означает, что комбинация этих значений, соединенных с каким-либо символом (который нельзя использовать в электронной почте и имени пользователя), должна быть уникальной.Результат тогда очень прост:

var uniqueString = $"{uniqueName}|{uniqueEmail}";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...