one way I have done it using a different technology is to use a private key.
you have a private key on the client and the server. On the client you could pass a md5 encypted (see encryption docs) string consisting of the username+password+timestamp this can then be decrypted at the other end, then the server can authenticate the user and check the password from your database. Then the server replies back with a MD5 encrypted sessionid+sequence+timestamp, the client decrypts and passes back sessionid+sequence+timestamp.
The timestamp and sequence numbers can be used to make the thing more secure. If the MD5 string is the same for each xmlrpc request/reply a packet sniffer could easily find it and make calls to your server. The sequence number is used as an extra level of protection, as if the sequence goes out of sync you can assume an unauthenticated client is trying to make calls. The sequence is incremented each time on the client side, and the server waits for the correct sequence number before it replies.
[edit after response] MD5 and SHA1 are one way so you need to use another encryption algorithm to use this method.