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, которая содержит текст "Профиль клиента".
Я новичок в этом, так что если я все понял неправильно, то извините, не могли бы вы быть более конкретным с вашим вопросом.