Je dois envoyer à un serveur dans POST un email (String) et un mot de passe (hash MD5 en byte []).Authentification Blackberry MD5 avec HTTP Post
Voici comment je reçois mon hachage MD5 où "mot de passe" est une chaîne (ce que l'entrez utilisateur):
byte[] passMD5 = Crypto.encodeStringMD5(password);
Et la fonction:
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;
}
Alors "passMD5" devrait être un MD5 hacher en octets de ma valeur de chaîne "mot de passe", non?
Ensuite, j'ai besoin d'envoyer les informations via HTTP POST à une URL et lire le résultat (XML). Voir ci-dessous le reste du code:
readURL(urlTemplate, email, passMD5);
Où urlTemplate est une chaîne comme « http://www.domain.com/myfile.aspx?action=login&enc=1 », e-mail et mot de passe d'une chaîne le hachage MD5 en octets.
Le readURL ci-dessous:
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);
}
}
Donc maintenant le hachage MD du mot de passe transformé en chaîne afin d'être ajouté à la fonction data.append() qui ne prend paramètres de chaîne ... Je pense que pour cette raison, je n'envoie pas le bon hachage MD5 et cela pose problème.
Du côté du serveur dans ASP.NET C#, j'ai ceci:
byte[] PasswordHash;
if (enc == 0) {
MD5 MD5Hasher = MD5.Create();
PasswordHash = MD5Hasher.ComputeHash(Encoding.Unicode.GetBytes(Password));
} else {
PasswordHash = Encoding.Unicode.GetBytes(Password);
}
Alors, quand je demande à cette adresse « http://www.domain.com/myfile.aspx?action=login&enc=0 » et donner le mot de passe en l'état (donc une chaîne, pas un octet [] et pas hachage MD5) et faire
data.append("pass", password);
puis cela fonctionne.
Je viens d'avoir un problème avec la création de mon hachage MD5 ou avec le HTTP POST ou les deux ... S'il vous plaît, aidez-moi!
Dans encodeStringMD5, essayez de transformer l'octet [] en BigInteger, puis d'utiliser toString (16) – Steve