Project: android-rackspacecloud
package com.rackspacecloud.android;
 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.Arrays; 
 
import android.content.SharedPreferences; 
 
public class PasswordManager { 
  
 private SharedPreferences settings; 
  
 public PasswordManager(SharedPreferences sp){ 
  settings = sp; 
 
  
 /*
  * checks the parameter string against the stored 
  * password 
  */
 
 public boolean verifyEnteredPassword(String password) { 
  return Arrays.toString(getHash(password)).equals(getStoredPassword()); 
 
  
 /*
  * return the hash of the password that is stored in 
  * shared preferences 
  */
 
 private String getStoredPassword(){ 
  return settings.getString(Preferences.PREF_KEY_PASSCODE_HASH, ""); 
 
  
 /*
  * turns off password requirement  
  */
 
 public void turnOffPassword() { 
  SharedPreferences.Editor editor = settings.edit(); 
  editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, ""); 
  editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false); 
  editor.commit(); 
 
  
 /*
  * submits a password change into memory 
  * stores the sha-256 hash of the password 
  */
 
 private void storeNewPassword(String hashedPassword) { 
  SharedPreferences.Editor editor = settings.edit(); 
  editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, hashedPassword); 
  editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, true); 
  editor.commit(); 
 
  
 /*
  * changes the password for 
  */
 
 public void changePassword(String password) { 
  storeNewPassword(Arrays.toString(getHash(password))); 
 
  
 /*
  * returns the sha-256 hash for a given 
  * string 
  */
 
 private byte[] getHash(String password) { 
  MessageDigest m = null
  try { 
   m = MessageDigest.getInstance("SHA-256"); 
   m.update(password.getBytes()); 
  catch (NoSuchAlgorithmException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  catch (NullPointerException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  
  return m.digest(); 
 
  
 /*
  * returns true if their is a password requirement 
  */
 
 public boolean hasPassword() { 
  return settings.getBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false); 
 
 
}