MD5 хеширование в windowsphone 8

Сойка, я пытаюсь хэшировать строку в MD5 в Windows Phone... но когда я звоню в класс MD5, я получаю следующую ошибку

Не удалось найти тип или имя пространства имен 'MD5' (отсутствует директива using или ссылка на сборку?)

PS: я использовал пространство имен System.Security.Cryptography
так как я могу использовать MD5 хэш в Windows Phone? вот мой код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;

namespace FluoraPin
{
    class HASHING
    {
        public static string GetMd5Hash(MD5 md5Hash, string input)
        {

            // Convert the input string to a byte array and compute the hash. 
            byte[] data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(input));

            // Create a new Stringbuilder to collect the bytes 
            // and create a string.
            StringBuilder sBuilder = new StringBuilder();

            // Loop through each byte of the hashed data  
            // and format each one as a hexadecimal string. 
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }

            // Return the hexadecimal string. 
            return sBuilder.ToString();
        }

        // t verify md5 hashing
        private bool VerifyMd5Hash(MD5 md5Hash, string input, string hash)
        {
            // Hash the input. 
            string hashOfInput = GetMd5Hash(md5Hash, input);

            // Create a StringComparer an compare the hashes.
            StringComparer comparer = StringComparer.OrdinalIgnoreCase;

            if (0 == comparer.Compare(hashOfInput, hash))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}

4 ответа

Я думаю, что ответ правильный в ошибке:

Не удалось найти тип или имя пространства имен 'MD5' (отсутствует директива using или ссылка на сборку?)

MD5 это не класс в System.Security.Cryptography пространство имен для Windows Phone. Смотрите MSDN System.Security.Cryptography страница для Windows Phone для подтверждения.

Сравните это с общим MSDN System.Security.Cryptography страница, на которой перечислены MD5 как класс в пространстве имен.

Сказав это, вы должны действительно использовать SHA-256 или выше вместо хеширования MD5 или SHA-1.

Хеширование SHA-256 доступно для Windows Phone 7 и 8 через SHA256Managed класс - в Security.Security.Cryptography пространство имен, которое вы уже используете. Для примера того, как использовать SHA256Managed см. ответ на связанный с этим вопрос.

Этот человек имеет реализацию хеширования MD5 в C#, которую можно использовать для WP8:

http://upadhyayjitesh.blogspot.com/2013/01/windows-phone-md5-hash-conversion.html

Вы можете добавить Bouncy Castle в качестве пакета NuGet для вашего проекта. Он поддерживает хеширование MD5 (и гораздо больше алгоритмов шифрования). Смотрите его NuGet страницу для более подробной информации. Или его страница проекта " Легион Надувного замка"

Я не проверял ваше решение, но нашел решение, которое отлично работает для меня.

using System.Security.Cryptography;

class MD5Hash
{
    public String getHash(String input)
    {
        MD5 md5 = System.Security.Cryptography.MD5.Create();
        byte[] inputBytes = Encoding.ASCII.GetBytes(input);
        byte[] hash = md5.ComputeHash(inputBytes);

        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < hash.Length; i++)
            sb.Append(hash[i].ToString("x2"));

        return sb.ToString();
    }

    public Boolean VerifyHash(String input, String hash)
    {
        String hashOfInput = getHash(input);

        StringComparer comparer = StringComparer.OrdinalIgnoreCase;

        if (0 == comparer.Compare(hashOfInput, hash))
            return true;
        else
            return false;
    }
}

Это будет хэшировать вашу строку, без ошибок.

Кроме того, ошибка, которую вы получаете, убедитесь, что вы не компилируете версию.Net, которая содержит текст "Профиль клиента".

Я новичок в этом, так что если я все понял неправильно, то извините, не могли бы вы быть более конкретным с вашим вопросом.

Другие вопросы по тегам