sftp can use keys for authentication, use the -i option. That is the best way to do it.
You can even put the keys in an agent and use that in cron, though that takes a little planning.
You can also make the key single purpose and lock it to using sftp by prepending the key with a forced command.
Edit: Once you have keys working, you can use batch mode (-b) to do the upload.
command="/usr/libexec/sftp-server" ssh-rsa AAAAB3NzaC1yc2EAA...
command="/usr/lib/openssh/sftp-server" ssh-rsa AAAAB3NzaC1yc2EAA...