Мне нужно отправить серверу в POST письмо (String) и пароль (хеш MD5 в байте []).Проверка подлинности Blackberry MD5 с HTTP-сообщением
Ниже, как я получу свой MD5 хэш, где "пароль" является String (то, что ввести пользователь):
byte[] passMD5 = Crypto.encodeStringMD5(password);
И функция:
public static byte[] encodeStringMD5(String s) throws Exception {
byte[] bytes = s.getBytes();
MD5Digest digest = new MD5Digest();
digest.update(bytes, 0, bytes.length);
int length = digest.getDigestLength();
byte[] md5 = new byte[length];
digest.getDigest(md5, 0, true);
return md5;
}
Так "passMD5" должно быть MD5 хэш в байтах моего строкового значения «пароль», правильно?
Затем мне нужно отправить информацию через HTTP POST на URL-адрес и прочитать результат (XML). Смотрите ниже остального кода:
readURL(urlTemplate, email, passMD5);
Где urlTemplate это строка, как «http://www.domain.com/myfile.aspx?action=login&enc=1», напишите строку и пароль MD5-хэш в байтах.
readURL ниже:
private void readURL(String url, String email, byte[] pass) throws IOException {
HttpConnection conn = null;
InputStream in = null;
OutputStream os = null;
byte dataBytes[];
try {
URLEncodedPostData data = new URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET, false);
data.append("email", email);
data.append("pass", pass.toString());
dataBytes = data.getBytes();
conn = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
conn.setRequestMethod(HttpConnection.POST);
conn.setRequestProperty("Content-Type", data.getContentType());
conn.setRequestProperty("Content-Length", Integer.toString(dataBytes.length));
os = conn.openOutputStream();
os.write(dataBytes);
os.flush();
os.close();
in = conn.openInputStream();
verifyLogin(getLoginContent(in));
} catch (IOException e) {
} catch (IllegalArgumentException e) {
} finally {
ConnectionUtil.close(conn, in);
ConnectionUtil.close(conn, os);
}
}
Так прямо сейчас MD хэш пароля в трансформируются в строку, чтобы добавить к функции data.append(), которая только принимает параметры типа String ... Я думаю, из-за этого я не посылаю хороший хеш MD5, и это создает проблему.
На стороне сервера в ASP.NET C#, у меня есть это:
byte[] PasswordHash;
if (enc == 0) {
MD5 MD5Hasher = MD5.Create();
PasswordHash = MD5Hasher.ComputeHash(Encoding.Unicode.GetBytes(Password));
} else {
PasswordHash = Encoding.Unicode.GetBytes(Password);
}
Так что, когда я задаю этот URL "http://www.domain.com/myfile.aspx?action=login&enc=0" и введите пароль AS IS (так String, а не байт [] а не хеш MD5) и до
то он работает.
У меня просто проблема с созданием хеша MD5 или с помощью HTTP POST или обоих ... Пожалуйста, помогите мне!
В encodeStringMD5 попробуйте сделать байт [] в BigInteger, а затем использовать toString (16) – Steve