我需要在POST中向服務器發送電子郵件(字符串)和密碼(字節[]中的MD5哈希)。使用HTTP發佈黑莓MD5身份驗證
下面我如何得到我的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()函數只需要字符串參數... 我想是因爲這個原因,我不發送良好的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(所以字符串,而不是一個byte []而不是MD5哈希),並做
data.append("pass", password);
然後它的工作。
我只是有創建我的MD5哈希或與HTTP POST或兩者的問題... 請幫助我!
在encodeStringMD5嘗試使字節[]進入BigInteger,然後使用toString(16) – Steve 2012-06-01 12:31:57