2014-04-11 65 views
0

我有一個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)服務器?

+0

執行各種'ftps.'調用 - 特別是'login' - 返回錯誤/狀態代碼,並且您正在檢查它們嗎?如果登錄失敗(可能是Simon給出的原因),那麼你仍然可以連接,但無法上傳。 – TripeHound

+0

是的,你是對的,我忘了檢查返回'ftps.login(),但不幸的是我真的不知道我怎麼可以在我的android應用程序服務器上哈希我的密碼(見下文)。 – Markus

回答

0

那麼你哈希密碼服務器端不在客戶端。 您發送密碼到FTP服務器服務器散列它並與用戶數據庫中的散列進行比較。

+0

和我將如何哈希我的密碼在服務器上?我現在將我的哈希方法從GUI類移到我的應用程序中更深的我的保存方法。但不幸的是,這並不奏效。 'values.put(MySQLiteHelper.SERVER_PASSWORD,savePassword(server.getPassword())); cr.insert(ServerProvider.CONTENT_URI,values);'這是將密碼保存到數據庫之前的最後一種可能性。你有沒有想法,我可以如何拯救它呢? – Markus