package org.hyperic.hq.security;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.security.authentication.encoding.*;
public class Md5PlusShaPasswordEncoder implements PasswordEncoder {
private static final Log log = LogFactory.getLog(Md5PlusShaPasswordEncoder.class);
private Md5PasswordEncoder md5PwdEncoder;
private ShaPasswordEncoder shaPwdEncoder;
public Md5PlusShaPasswordEncoder(Md5PasswordEncoder md5PwdEncoder, ShaPasswordEncoder shaPwdEncoder){
this.md5PwdEncoder = md5PwdEncoder;
this.shaPwdEncoder = shaPwdEncoder;
}
public String encodePassword(String rawPass, Object salt) throws DataAccessException {
String md5Encoded = md5PwdEncoder.encodePassword(rawPass, salt);
String res = shaPwdEncoder.encodePassword(md5Encoded, salt);
log.debug("encodePassword? " + rawPass + " -> " + res);
return res;
}
public boolean isPasswordValid(String encPass, String rawPass, Object salt) throws DataAccessException {
String md5Encoded = md5PwdEncoder.encodePassword(rawPass, salt);
boolean res = shaPwdEncoder.isPasswordValid(encPass, md5Encoded, salt);
log.debug("isPasswordValid? " + rawPass + " -> " + encPass + " : " + res);
// we cannot know for sure if this was md5 encoded as well.
// We may want to add a signature "ms" at the end of the encoded string, and perform the check on the string without its postfix.
return res;
}
}