我有一個Android應用程序將數據上傳到FTP(S)服務器。一切工作正常,直到我哈希我的密碼。奇怪的是登錄/上傳和斷開連接似乎工作,但我的FTP顯示沒有新的數據。散列密碼導致FTP上傳問題
繼承人,我填我的密碼代碼:
MessageDigest sha;
try {
sha = MessageDigest.getInstance("SHA-1");
byte[] hashOne = sha.digest(etPassword.getText().toString().getBytes());
server.setPassword(hexEncode(hashOne));
} catch (NoSuchAlgorithmException e) {
//
}
static private String hexEncode(byte[] aInput) {
StringBuffer result = new StringBuffer();
char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
for (byte b : aInput) {
result.append(digits[(b & 0xf0) >> 4]);
result.append(digits[b & 0x0f]);
}
return result.toString();
}
,並在我的上傳服務:
private void ftpUpload(File localSrc) {
try {
FTPSClient ftps = new FTPSClient();
ftps.connect(server.getIp());
ftps.login(server.getUser(), server.getPassword());
ftps.changeWorkingDirectory(server.getRemoteDir());
ftps.setFileType(FTPClient.BINARY_FILE_TYPE);
try {
upload(localSrc, ftps); // does the upload magic
} catch (Exception e) {
//
} finally {
ftps.disconnect();
}
} catch (Exception e) {
//
}
}
出於測試目的,我試圖用FTPClient
代替,但我得到了同樣的問題。
btw我使用Apache commons-net作爲FTP的東西。
我不例外,一切似乎都工作得很好。 (ftps.isConnected()
也說我已連接)。但是沒有新的數據被傳送到FTP服務器。有沒有人知道這個問題會是什麼?
編輯:我不確定我在第一篇文章中是否清楚。我希望用戶在應用程序中輸入一個FTP(S)服務器的IP /用戶名/密碼,然後在應用程序中將一些數據上傳到該服務器。由於我不想在我的數據庫中以明文保存用戶密碼,因此我想先將它散列。但是由於我在將密碼保存到數據庫之前散列了它,因爲密碼錯誤,我無法登錄到FTP(S)服務器。
所以我的問題是:我怎樣才能實現一個哈希密碼,仍然能夠登錄到它的FTP(S)服務器?
執行各種'ftps.'調用 - 特別是'login' - 返回錯誤/狀態代碼,並且您正在檢查它們嗎?如果登錄失敗(可能是Simon給出的原因),那麼你仍然可以連接,但無法上傳。 – TripeHound
是的,你是對的,我忘了檢查返回'ftps.login(),但不幸的是我真的不知道我怎麼可以在我的android應用程序服務器上哈希我的密碼(見下文)。 – Markus