The following class provides the venue to translate the sample string “mySecr3tP4ssw0rd” into the encrypted string “Nj3lzFVrt9dx2gENZeh2H5xY6PY=”, which would be tougher to crack by brute force than a plain password in case a hackers gets hold of your data store.
import java.security.MessageDigest;
import sun.misc.BASE64Encoder;
/**
* String encryption related utilities.
* @author C. Peter Chen of http://dev-notes.com
* @date 20080512
*/
public class StringEncryptUtil {
/**
* This main() class is used for demo only.
* @param args
*/
public static void main(String[] args) {
System.out.println("SHA encrypted mySecr3tP4ssw0rd: " + encryptSha("mySecr3tP4ssw0rd"));
}
/**
* Performs a SHA encryption process on the incoming string parameter.
* @param inputStr
* @return SHA-encrypted string if successful, or null if there are problems.
*/
public static synchronized String encryptSha(String inputStr) {
try {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(inputStr.getBytes("UTF-8"));
byte digest[] = md.digest();
return (new BASE64Encoder()).encode(digest);
}
catch (Exception e) {
return null;
}
}
}
As you will notice, there is no decrypt method, that is because there probably is no need for one. For instance, we have “Nj3lzFVrt9dx2gENZeh2H5xY6PY=” in the data store for the user Scott; when Scott logs in, we should SHA-encrypt the password he had just typed in, and compare the encrypted string with the encrypted string found in the data store.
