As Jon Skeet already mentioned, the usual reason why this happens is that the files are not transferred in binary, but in ASCII mode.
This is supported by the FTPClient documentation for FTPClient.setFileType(), which states:
The default file type is FTP.ASCII_FILE_TYPE if this method is never called.
To transfer your file in binary mode using FTPClient, call the setFileType
before uploading:
FTPClient.setFileType(FTP.BINARY_FILE_TYPE);
The session will stay in binary mode until you change it again.
By the way, timestamps are not an issue, they do not affect the MD5 hash.