Blackberry MD5 аутентификация с помощью HTTP Post - PullRequest
1 голос
/ 20 июля 2010

Мне нужно отправить серверу в POST электронное письмо (String) и пароль (хеш MD5 в байте []).

Ниже показано, как получить хеш MD5, где «password» - это строка (что пользователь вводит):

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-хэш пароля преобразуется в String для добавления в функцию data.append (), которая принимает только строковые параметры ... Думаю, из-за этого, Я не отправляю хороший хэш 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" и укажите пароль КАК ЕСТЬ (так что String, а не byte [] и не MD5 хеш) и сделайте

data.append("pass", password);

, тогда он заработает.

У меня просто проблема с созданием моего хэша MD5 или с HTTP POST или с обоими ... Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 20 июля 2010

Вы не можете просто вызвать toString () для байта [] и ожидать получить значимый результат.Если вы хотите преобразовать его в шестнадцатеричное представление байтов, вам нужен метод для этого.Я предлагаю вернуться к вашему предыдущему вопросу на Кодирование Blackberry MD5, отличное от MD5 в C # , поскольку у вас там была функция, которая передавала разговор от байта [] до строки.

...