If a salt accompanies the return value
(i.e. <code>returnedHash.{@link hunt.shiro.crypto.hash.Hash#getSalt() getSalt()} !is null</code>), this
same exact salt <b><em>MUST</em></b> be presented back to the {@code HashService} if hash
comparison/verification will be performed at a later time (for example, for password hash or file checksum
comparison).
<p/>
For additional security, the {@code HashService}'s internal implementation may use more complex salting
strategies than what would be achieved by computing a {@code Hash} manually.
<p/>
In summary, if a {@link HashService} returns a salt in a returned Hash, it is expected that the same salt
will be provided to the same {@code HashService} instance.
@param request the request to process
@return the hashed data
@see Hash#getSalt()
Computes a hash based on the given request.
<h3>Salt Notice</h3>
If a salt accompanies the return value (i.e. <code>returnedHash.{@link hunt.shiro.crypto.hash.Hash#getSalt() getSalt()} !is null</code>), this same exact salt <b><em>MUST</em></b> be presented back to the {@code HashService} if hash comparison/verification will be performed at a later time (for example, for password hash or file checksum comparison). <p/> For additional security, the {@code HashService}'s internal implementation may use more complex salting strategies than what would be achieved by computing a {@code Hash} manually. <p/> In summary, if a {@link HashService} returns a salt in a returned Hash, it is expected that the same salt will be provided to the same {@code HashService} instance.
@param request the request to process @return the hashed data @see Hash#getSalt()