2014-04-11 31 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