| 
 | ||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.apache.shiro.codec.CodecSupport
org.apache.shiro.crypto.hash.AbstractHash
org.apache.shiro.crypto.hash.SimpleHash
public class SimpleHash
A Hash implementation that allows any MessageDigest algorithm name to
 be used.  This class is a less type-safe variant than the other AbstractHash subclasses
 (e.g. Sha512Hash, etc), but it does allow for any algorithm name to be specified in case the other subclass
 implementations do not represent an algorithm that you may want to use.
 
AbstractHash class.  It subclasses
 AbstractHash only to retain backwards-compatibility.
| Nested Class Summary | 
|---|
| Nested classes/interfaces inherited from interface org.apache.shiro.util.ByteSource | 
|---|
| ByteSource.Util | 
| Field Summary | 
|---|
| Fields inherited from class org.apache.shiro.codec.CodecSupport | 
|---|
| PREFERRED_ENCODING | 
| Constructor Summary | |
|---|---|
| SimpleHash(String algorithmName)Creates an new instance with only its algorithmNameset - no hashing is performed. | |
| SimpleHash(String algorithmName,
           Object source)Creates an algorithmName-specific hash of the specifiedsourcewith nosaltusing a
 single hash iteration. | |
| SimpleHash(String algorithmName,
           Object source,
           Object salt)Creates an algorithmName-specific hash of the specifiedsourceusing the givensaltusing a single hash iteration. | |
| SimpleHash(String algorithmName,
           Object source,
           Object salt,
           int hashIterations)Creates an algorithmName-specific hash of the specifiedsourceusing the givensalta total ofhashIterationstimes. | |
| Method Summary | |
|---|---|
| protected  ByteSource | convertSaltToBytes(Object salt)Acquires the specified saltargument's bytes and returns them in the form of aByteSourceinstance. | 
| protected  ByteSource | convertSourceToBytes(Object source)Acquires the specified sourceargument's bytes and returns them in the form of aByteSourceinstance. | 
|  boolean | equals(Object o)Returns trueif the specified object is a Hash and itsbyte arrayis identical to
 this Hash's byte array,falseotherwise. | 
|  String | getAlgorithmName()Returns the MessageDigestalgorithm name to use when performing the hash. | 
|  byte[] | getBytes()Returns the wrapped byte array. | 
| protected  MessageDigest | getDigest(String algorithmName)Returns the JDK MessageDigest instance to use for executing the hash. | 
|  int | getIterations()Returns the number of hash iterations used to compute the hash. | 
|  ByteSource | getSalt()Returns a salt used to compute the hash or nullif no salt was used. | 
| protected  byte[] | hash(byte[] bytes)Hashes the specified byte array without a salt for a single iteration. | 
| protected  byte[] | hash(byte[] bytes,
     byte[] salt)Hashes the specified byte array using the given saltfor a single iteration. | 
| protected  byte[] | hash(byte[] bytes,
     byte[] salt,
     int hashIterations)Hashes the specified byte array using the given saltfor the specified number of iterations. | 
|  int | hashCode()Simply returns toHex().hashCode(); | 
|  boolean | isEmpty()Returns trueif the underlying wrapped byte array is null or empty (zero length),falseotherwise. | 
|  void | setBytes(byte[] alreadyHashedBytes)Sets the raw bytes stored by this hash instance. | 
|  void | setIterations(int iterations)Sets the iterations used to previously compute AN ALREADY GENERATED HASH. | 
|  void | setSalt(ByteSource salt)Sets the salt used to previously compute AN ALREADY GENERATED HASH. | 
|  String | toBase64()Returns a Base64-encoded string of the underlying byte array. | 
| protected  ByteSource | toByteSource(Object o)Converts a given object into a ByteSourceinstance. | 
|  String | toHex()Returns a hex-encoded string of the underlying byte array. | 
|  String | toString()Simple implementation that merely returns toHex(). | 
| Methods inherited from class org.apache.shiro.codec.CodecSupport | 
|---|
| isByteSource, objectToBytes, objectToString, toBytes, toBytes, toBytes, toBytes, toBytes, toBytes, toBytes, toChars, toChars, toString, toString, toString | 
| Methods inherited from class java.lang.Object | 
|---|
| clone, finalize, getClass, notify, notifyAll, wait, wait, wait | 
| Constructor Detail | 
|---|
public SimpleHash(String algorithmName)
algorithmName set - no hashing is performed.
 
 Because all other constructors in this class hash the source constructor argument, this
 constructor is useful in scenarios when you have a byte array that you know is already hashed and
 just want to set the bytes in their raw form directly on an instance.  After using this constructor,
 you can then immediately call setBytes to have a fully-initialized instance.
 
 N.B.The algorithm identified by the algorithmName parameter must be available on the JVM.  If it
 is not, a UnknownAlgorithmException will be thrown when the hash is performed (not at instantiation).
algorithmName - the MessageDigest algorithm name to use when
                      performing the hash.UnknownAlgorithmException
public SimpleHash(String algorithmName,
                  Object source)
           throws CodecException,
                  UnknownAlgorithmException
algorithmName-specific hash of the specified source with no salt using a
 single hash iteration.
 
 This is a convenience constructor that merely executes this( algorithmName, source, null, 1);.
 
 Please see the
 SimpleHashHash(algorithmName, Object,Object,int)
 constructor for the types of Objects that may be passed into this constructor, as well as how to support further
 types.
algorithmName - the MessageDigest algorithm name to use when
                      performing the hash.source - the object to be hashed.
CodecException - if the specified source cannot be converted into a byte array (byte[]).
UnknownAlgorithmException - if the algorithmName is not available.
public SimpleHash(String algorithmName,
                  Object source,
                  Object salt)
           throws CodecException,
                  UnknownAlgorithmException
algorithmName-specific hash of the specified source using the given salt
 using a single hash iteration.
 
 It is a convenience constructor that merely executes this( algorithmName, source, salt, 1);.
 
 Please see the
 SimpleHashHash(algorithmName, Object,Object,int)
 constructor for the types of Objects that may be passed into this constructor, as well as how to support further
 types.
algorithmName - the MessageDigest algorithm name to use when
                      performing the hash.source - the source object to be hashed.salt - the salt to use for the hash
CodecException - if either constructor argument cannot be converted into a byte array.
UnknownAlgorithmException - if the algorithmName is not available.
public SimpleHash(String algorithmName,
                  Object source,
                  Object salt,
                  int hashIterations)
           throws CodecException,
                  UnknownAlgorithmException
algorithmName-specific hash of the specified source using the given
 salt a total of hashIterations times.
 
 By default, this class only supports Object method arguments of
 type byte[], char[], String, File,
 InputStream or ByteSource.  If either
 argument is anything other than these types a CodecException
 will be thrown.
 
 If you want to be able to hash other object types, or use other salt types, you need to override the
 toBytes(Object) method to support those specific types.  Your other option is to
 convert your arguments to one of the default supported types first before passing them in to this
 constructor}.
algorithmName - the MessageDigest algorithm name to use when
                       performing the hash.source - the source object to be hashed.salt - the salt to use for the hashhashIterations - the number of times the source argument hashed for attack resiliency.
CodecException - if either Object constructor argument cannot be converted into a byte array.
UnknownAlgorithmException - if the algorithmName is not available.| Method Detail | 
|---|
protected ByteSource convertSourceToBytes(Object source)
source argument's bytes and returns them in the form of a ByteSource instance.
 
 This implementation merely delegates to the convenience toByteSource(Object) method for generic
 conversion.  Can be overridden by subclasses for source-specific conversion.
source - the source object to be hashed.
ByteSource instance.protected ByteSource convertSaltToBytes(Object salt)
salt argument's bytes and returns them in the form of a ByteSource instance.
 
 This implementation merely delegates to the convenience toByteSource(Object) method for generic
 conversion.  Can be overridden by subclasses for salt-specific conversion.
salt - the salt to be use for the hash.
ByteSource instance.protected ByteSource toByteSource(Object o)
ByteSource instance.  Assumes the object can be converted to bytes.
o - the Object to convert into a ByteSource instance.
ByteSource representation of the specified object's bytes.public String getAlgorithmName()
MessageDigest algorithm name to use when performing the hash.
getAlgorithmName in interface HashgetAlgorithmName in class AbstractHashMessageDigest algorithm name to use when performing the hash.public ByteSource getSalt()
Hashnull if no salt was used.
null if no salt was used.public int getIterations()
Hash
public byte[] getBytes()
ByteSource
getBytes in interface ByteSourcegetBytes in class AbstractHashpublic void setBytes(byte[] alreadyHashedBytes)
setBytes in class AbstractHashalreadyHashedBytes - the raw already-hashed bytes to store in this instance.public void setIterations(int iterations)
iterations - the number of hash iterations used to previously create the hash/digest.public void setSalt(ByteSource salt)
salt - the salt used to previously create the hash/digest.
protected MessageDigest getDigest(String algorithmName)
                           throws UnknownAlgorithmException
getDigest in class AbstractHashalgorithmName - the algorithm to use for the hash, provided by subclasses.
algorithm.
UnknownAlgorithmException - if the specified algorithm name is not available.
protected byte[] hash(byte[] bytes)
               throws UnknownAlgorithmException
hash in class AbstractHashbytes - the bytes to hash.
UnknownAlgorithmException - if the configured algorithmName is not available.
protected byte[] hash(byte[] bytes,
                      byte[] salt)
               throws UnknownAlgorithmException
salt for a single iteration.
hash in class AbstractHashbytes - the bytes to hashsalt - the salt to use for the initial hash
UnknownAlgorithmException - if the configured algorithmName is not available.
protected byte[] hash(byte[] bytes,
                      byte[] salt,
                      int hashIterations)
               throws UnknownAlgorithmException
salt for the specified number of iterations.
hash in class AbstractHashbytes - the bytes to hashsalt - the salt to use for the initial hashhashIterations - the number of times the the bytes will be hashed (for attack resiliency).
UnknownAlgorithmException - if the algorithmName is not available.public boolean isEmpty()
ByteSourcetrue if the underlying wrapped byte array is null or empty (zero length), false
 otherwise.
true if the underlying wrapped byte array is null or empty (zero length), false
         otherwise.public String toHex()
byte array.
 
 This implementation caches the resulting hex string so multiple calls to this method remain efficient.
 However, calling setBytes will null the cached value, forcing it to be recalculated the
 next time this method is called.
toHex in interface ByteSourcetoHex in class AbstractHashbyte array.public String toBase64()
byte array.
 
 This implementation caches the resulting Base64 string so multiple calls to this method remain efficient.
 However, calling setBytes will null the cached value, forcing it to be recalculated the
 next time this method is called.
toBase64 in interface ByteSourcetoBase64 in class AbstractHashbyte array.public String toString()
toHex().
toString in class AbstractHashtoHex() value.public boolean equals(Object o)
true if the specified object is a Hash and its byte array is identical to
 this Hash's byte array, false otherwise.
equals in class AbstractHasho - the object (Hash) to check for equality.
true if the specified object is a Hash and its byte array is identical to
         this Hash's byte array, false otherwise.public int hashCode()
hashCode in class AbstractHash| 
 | ||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||