我有一个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