Я реализовал веб-службу (.asmx) с использованием .NET Framework, которая возвращает мне хеш-строку.
Вот код:
public string HashCode(string str)
{
string rethash = "";
try
{
System.Security.Cryptography.SHA1 hash = System.Security.Cryptography.SHA1.Create();
System.Text.ASCIIEncoding encoder = new System.Text.ASCIIEncoding();
byte[] combined = encoder.GetBytes(str);
hash.ComputeHash(combined);
rethash = Convert.ToBase64String(hash.Hash);
}
catch (Exception ex)
{
string strerr = "Error in HashCode : " + ex.Message;
}
return rethash;
}
В моем приложении для Android я беру пароль от пользователя через EditText и снова хэширую его с помощью алгоритма SHA-1. Учитывая тот факт, что я предоставляю один и тот же пароль как в коде C #, так и в коде Android, будут ли хеш-строки, возвращаемые обоими, равными?
Фрагмент кода Android:
private static String bytesToHexString(byte[] bytes)
{
StringBuffer sb = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(0xFF & bytes[i]);
if (hex.length() == 1) {
sb.append('0');
}
sb.append(hex);
}
return sb.toString();
}
// generate a hash
public void Sha(String password)
{
MessageDigest digest=null;
String hash;
try {
digest = MessageDigest.getInstance("SHA-1");
digest.update(password.getBytes());
hash = bytesToHexString(digest.digest());
Log.i("Eamorr", "result is " + hash);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
Моя основная цель - в основном сравнить хэш-строки в обоих случаях и, если они равны, отобразить сообщение о том, что «Пользователь действителен».
Может ли кто-нибудь помочь мне в этом?
заранее спасибо