<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
</head>
<body>
<main role="main">
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span><a id="line.1">/*</a>
<span class="sourceLineNo">002</span><a id="line.2"> * Licensed to the Apache Software Foundation (ASF) under one</a>
<span class="sourceLineNo">003</span><a id="line.3"> * or more contributor license agreements.  See the NOTICE file</a>
<span class="sourceLineNo">004</span><a id="line.4"> * distributed with this work for additional information</a>
<span class="sourceLineNo">005</span><a id="line.5"> * regarding copyright ownership.  The ASF licenses this file</a>
<span class="sourceLineNo">006</span><a id="line.6"> * to you under the Apache License, Version 2.0 (the</a>
<span class="sourceLineNo">007</span><a id="line.7"> * "License"); you may not use this file except in compliance</a>
<span class="sourceLineNo">008</span><a id="line.8"> * with the License.  You may obtain a copy of the License at</a>
<span class="sourceLineNo">009</span><a id="line.9"> *</a>
<span class="sourceLineNo">010</span><a id="line.10"> *     http://www.apache.org/licenses/LICENSE-2.0</a>
<span class="sourceLineNo">011</span><a id="line.11"> *</a>
<span class="sourceLineNo">012</span><a id="line.12"> * Unless required by applicable law or agreed to in writing,</a>
<span class="sourceLineNo">013</span><a id="line.13"> * software distributed under the License is distributed on an</a>
<span class="sourceLineNo">014</span><a id="line.14"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
<span class="sourceLineNo">015</span><a id="line.15"> * KIND, either express or implied.  See the License for the</a>
<span class="sourceLineNo">016</span><a id="line.16"> * specific language governing permissions and limitations</a>
<span class="sourceLineNo">017</span><a id="line.17"> * under the License.</a>
<span class="sourceLineNo">018</span><a id="line.18"> */</a>
<span class="sourceLineNo">019</span><a id="line.19">package org.apache.shiro.crypto.hash;</a>
<span class="sourceLineNo">020</span><a id="line.20"></a>
<span class="sourceLineNo">021</span><a id="line.21">import org.apache.shiro.codec.Base64;</a>
<span class="sourceLineNo">022</span><a id="line.22">import org.apache.shiro.codec.CodecException;</a>
<span class="sourceLineNo">023</span><a id="line.23">import org.apache.shiro.codec.CodecSupport;</a>
<span class="sourceLineNo">024</span><a id="line.24">import org.apache.shiro.codec.Hex;</a>
<span class="sourceLineNo">025</span><a id="line.25">import org.apache.shiro.crypto.UnknownAlgorithmException;</a>
<span class="sourceLineNo">026</span><a id="line.26"></a>
<span class="sourceLineNo">027</span><a id="line.27">import java.io.Serializable;</a>
<span class="sourceLineNo">028</span><a id="line.28">import java.security.MessageDigest;</a>
<span class="sourceLineNo">029</span><a id="line.29">import java.security.NoSuchAlgorithmException;</a>
<span class="sourceLineNo">030</span><a id="line.30">import java.util.Arrays;</a>
<span class="sourceLineNo">031</span><a id="line.31"></a>
<span class="sourceLineNo">032</span><a id="line.32">/**</a>
<span class="sourceLineNo">033</span><a id="line.33"> * Provides a base for all Shiro Hash algorithms with support for salts and multiple hash iterations.</a>
<span class="sourceLineNo">034</span><a id="line.34"> * &lt;p/&gt;</a>
<span class="sourceLineNo">035</span><a id="line.35"> * Read</a>
<span class="sourceLineNo">036</span><a id="line.36"> * &lt;a href="http://www.owasp.org/index.php/Hashing_Java" target="blank"&gt;http://www.owasp.org/index.php/Hashing_Java&lt;/a&gt;</a>
<span class="sourceLineNo">037</span><a id="line.37"> * for a good article on the benefits of hashing, including what a 'salt' is as well as why it and multiple hash</a>
<span class="sourceLineNo">038</span><a id="line.38"> * iterations can be useful.</a>
<span class="sourceLineNo">039</span><a id="line.39"> * &lt;p/&gt;</a>
<span class="sourceLineNo">040</span><a id="line.40"> * This class and its subclasses support hashing with additional capabilities of salting and multiple iterations via</a>
<span class="sourceLineNo">041</span><a id="line.41"> * overloaded constructors.</a>
<span class="sourceLineNo">042</span><a id="line.42"> *</a>
<span class="sourceLineNo">043</span><a id="line.43"> * @since 0.9</a>
<span class="sourceLineNo">044</span><a id="line.44"> * @deprecated in Shiro 1.1 in favor of using the concrete {@link SimpleHash} implementation directly.</a>
<span class="sourceLineNo">045</span><a id="line.45"> */</a>
<span class="sourceLineNo">046</span><a id="line.46">@Deprecated</a>
<span class="sourceLineNo">047</span><a id="line.47">public abstract class AbstractHash extends CodecSupport implements Hash, Serializable {</a>
<span class="sourceLineNo">048</span><a id="line.48"></a>
<span class="sourceLineNo">049</span><a id="line.49">    /**</a>
<span class="sourceLineNo">050</span><a id="line.50">     * The hashed data</a>
<span class="sourceLineNo">051</span><a id="line.51">     */</a>
<span class="sourceLineNo">052</span><a id="line.52">    private byte[] bytes = null;</a>
<span class="sourceLineNo">053</span><a id="line.53"></a>
<span class="sourceLineNo">054</span><a id="line.54">    /**</a>
<span class="sourceLineNo">055</span><a id="line.55">     * Cached value of the {@link #toHex() toHex()} call so multiple calls won't incur repeated overhead.</a>
<span class="sourceLineNo">056</span><a id="line.56">     */</a>
<span class="sourceLineNo">057</span><a id="line.57">    private transient String hexEncoded = null;</a>
<span class="sourceLineNo">058</span><a id="line.58">    /**</a>
<span class="sourceLineNo">059</span><a id="line.59">     * Cached value of the {@link #toBase64() toBase64()} call so multiple calls won't incur repeated overhead.</a>
<span class="sourceLineNo">060</span><a id="line.60">     */</a>
<span class="sourceLineNo">061</span><a id="line.61">    private transient String base64Encoded = null;</a>
<span class="sourceLineNo">062</span><a id="line.62"></a>
<span class="sourceLineNo">063</span><a id="line.63">    /**</a>
<span class="sourceLineNo">064</span><a id="line.64">     * Creates an new instance without any of its properties set (no hashing is performed).</a>
<span class="sourceLineNo">065</span><a id="line.65">     * &lt;p/&gt;</a>
<span class="sourceLineNo">066</span><a id="line.66">     * Because all constructors in this class (except this one) hash the {@code source} constructor argument, this</a>
<span class="sourceLineNo">067</span><a id="line.67">     * default, no-arg constructor is useful in scenarios when you have a byte array that you know is already hashed and</a>
<span class="sourceLineNo">068</span><a id="line.68">     * just want to set the bytes in their raw form directly on an instance.  After instantiating the instance with</a>
<span class="sourceLineNo">069</span><a id="line.69">     * this default, no-arg constructor, you can then immediately call {@link #setBytes setBytes} to have a</a>
<span class="sourceLineNo">070</span><a id="line.70">     * fully-initialized instance.</a>
<span class="sourceLineNo">071</span><a id="line.71">     */</a>
<span class="sourceLineNo">072</span><a id="line.72">    public AbstractHash() {</a>
<span class="sourceLineNo">073</span><a id="line.73">    }</a>
<span class="sourceLineNo">074</span><a id="line.74"></a>
<span class="sourceLineNo">075</span><a id="line.75">    /**</a>
<span class="sourceLineNo">076</span><a id="line.76">     * Creates a hash of the specified {@code source} with no {@code salt} using a single hash iteration.</a>
<span class="sourceLineNo">077</span><a id="line.77">     * &lt;p/&gt;</a>
<span class="sourceLineNo">078</span><a id="line.78">     * It is a convenience constructor that merely executes &lt;code&gt;this( source, null, 1);&lt;/code&gt;.</a>
<span class="sourceLineNo">079</span><a id="line.79">     * &lt;p/&gt;</a>
<span class="sourceLineNo">080</span><a id="line.80">     * Please see the</a>
<span class="sourceLineNo">081</span><a id="line.81">     * {@link #AbstractHash(Object source, Object salt, int numIterations) AbstractHash(Object,Object,int)}</a>
<span class="sourceLineNo">082</span><a id="line.82">     * constructor for the types of Objects that may be passed into this constructor, as well as how to support further</a>
<span class="sourceLineNo">083</span><a id="line.83">     * types.</a>
<span class="sourceLineNo">084</span><a id="line.84">     *</a>
<span class="sourceLineNo">085</span><a id="line.85">     * @param source the object to be hashed.</a>
<span class="sourceLineNo">086</span><a id="line.86">     * @throws CodecException if the specified {@code source} cannot be converted into a byte array (byte[]).</a>
<span class="sourceLineNo">087</span><a id="line.87">     */</a>
<span class="sourceLineNo">088</span><a id="line.88">    public AbstractHash(Object source) throws CodecException {</a>
<span class="sourceLineNo">089</span><a id="line.89">        this(source, null, 1);</a>
<span class="sourceLineNo">090</span><a id="line.90">    }</a>
<span class="sourceLineNo">091</span><a id="line.91"></a>
<span class="sourceLineNo">092</span><a id="line.92">    /**</a>
<span class="sourceLineNo">093</span><a id="line.93">     * Creates a hash of the specified {@code source} using the given {@code salt} using a single hash iteration.</a>
<span class="sourceLineNo">094</span><a id="line.94">     * &lt;p/&gt;</a>
<span class="sourceLineNo">095</span><a id="line.95">     * It is a convenience constructor that merely executes &lt;code&gt;this( source, salt, 1);&lt;/code&gt;.</a>
<span class="sourceLineNo">096</span><a id="line.96">     * &lt;p/&gt;</a>
<span class="sourceLineNo">097</span><a id="line.97">     * Please see the</a>
<span class="sourceLineNo">098</span><a id="line.98">     * {@link #AbstractHash(Object source, Object salt, int numIterations) AbstractHash(Object,Object,int)}</a>
<span class="sourceLineNo">099</span><a id="line.99">     * constructor for the types of Objects that may be passed into this constructor, as well as how to support further</a>
<span class="sourceLineNo">100</span><a id="line.100">     * types.</a>
<span class="sourceLineNo">101</span><a id="line.101">     *</a>
<span class="sourceLineNo">102</span><a id="line.102">     * @param source the source object to be hashed.</a>
<span class="sourceLineNo">103</span><a id="line.103">     * @param salt   the salt to use for the hash</a>
<span class="sourceLineNo">104</span><a id="line.104">     * @throws CodecException if either constructor argument cannot be converted into a byte array.</a>
<span class="sourceLineNo">105</span><a id="line.105">     */</a>
<span class="sourceLineNo">106</span><a id="line.106">    public AbstractHash(Object source, Object salt) throws CodecException {</a>
<span class="sourceLineNo">107</span><a id="line.107">        this(source, salt, 1);</a>
<span class="sourceLineNo">108</span><a id="line.108">    }</a>
<span class="sourceLineNo">109</span><a id="line.109"></a>
<span class="sourceLineNo">110</span><a id="line.110">    /**</a>
<span class="sourceLineNo">111</span><a id="line.111">     * Creates a hash of the specified {@code source} using the given {@code salt} a total of</a>
<span class="sourceLineNo">112</span><a id="line.112">     * {@code hashIterations} times.</a>
<span class="sourceLineNo">113</span><a id="line.113">     * &lt;p/&gt;</a>
<span class="sourceLineNo">114</span><a id="line.114">     * By default, this class only supports Object method arguments of</a>
<span class="sourceLineNo">115</span><a id="line.115">     * type {@code byte[]}, {@code char[]}, {@link String}, {@link java.io.File File}, or</a>
<span class="sourceLineNo">116</span><a id="line.116">     * {@link java.io.InputStream InputStream}.  If either argument is anything other than these</a>
<span class="sourceLineNo">117</span><a id="line.117">     * types a {@link org.apache.shiro.codec.CodecException CodecException} will be thrown.</a>
<span class="sourceLineNo">118</span><a id="line.118">     * &lt;p/&gt;</a>
<span class="sourceLineNo">119</span><a id="line.119">     * If you want to be able to hash other object types, or use other salt types, you need to override the</a>
<span class="sourceLineNo">120</span><a id="line.120">     * {@link #toBytes(Object) toBytes(Object)} method to support those specific types.  Your other option is to</a>
<span class="sourceLineNo">121</span><a id="line.121">     * convert your arguments to one of the default three supported types first before passing them in to this</a>
<span class="sourceLineNo">122</span><a id="line.122">     * constructor}.</a>
<span class="sourceLineNo">123</span><a id="line.123">     *</a>
<span class="sourceLineNo">124</span><a id="line.124">     * @param source         the source object to be hashed.</a>
<span class="sourceLineNo">125</span><a id="line.125">     * @param salt           the salt to use for the hash</a>
<span class="sourceLineNo">126</span><a id="line.126">     * @param hashIterations the number of times the {@code source} argument hashed for attack resiliency.</a>
<span class="sourceLineNo">127</span><a id="line.127">     * @throws CodecException if either Object constructor argument cannot be converted into a byte array.</a>
<span class="sourceLineNo">128</span><a id="line.128">     */</a>
<span class="sourceLineNo">129</span><a id="line.129">    public AbstractHash(Object source, Object salt, int hashIterations) throws CodecException {</a>
<span class="sourceLineNo">130</span><a id="line.130">        byte[] sourceBytes = toBytes(source);</a>
<span class="sourceLineNo">131</span><a id="line.131">        byte[] saltBytes = null;</a>
<span class="sourceLineNo">132</span><a id="line.132">        if (salt != null) {</a>
<span class="sourceLineNo">133</span><a id="line.133">            saltBytes = toBytes(salt);</a>
<span class="sourceLineNo">134</span><a id="line.134">        }</a>
<span class="sourceLineNo">135</span><a id="line.135">        byte[] hashedBytes = hash(sourceBytes, saltBytes, hashIterations);</a>
<span class="sourceLineNo">136</span><a id="line.136">        setBytes(hashedBytes);</a>
<span class="sourceLineNo">137</span><a id="line.137">    }</a>
<span class="sourceLineNo">138</span><a id="line.138"></a>
<span class="sourceLineNo">139</span><a id="line.139">    /**</a>
<span class="sourceLineNo">140</span><a id="line.140">     * Implemented by subclasses, this specifies the {@link MessageDigest MessageDigest} algorithm name </a>
<span class="sourceLineNo">141</span><a id="line.141">     * to use when performing the hash.</a>
<span class="sourceLineNo">142</span><a id="line.142">     *</a>
<span class="sourceLineNo">143</span><a id="line.143">     * @return the {@link MessageDigest MessageDigest} algorithm name to use when performing the hash.</a>
<span class="sourceLineNo">144</span><a id="line.144">     */</a>
<span class="sourceLineNo">145</span><a id="line.145">    public abstract String getAlgorithmName();</a>
<span class="sourceLineNo">146</span><a id="line.146"></a>
<span class="sourceLineNo">147</span><a id="line.147">    public byte[] getBytes() {</a>
<span class="sourceLineNo">148</span><a id="line.148">        return this.bytes;</a>
<span class="sourceLineNo">149</span><a id="line.149">    }</a>
<span class="sourceLineNo">150</span><a id="line.150"></a>
<span class="sourceLineNo">151</span><a id="line.151">    /**</a>
<span class="sourceLineNo">152</span><a id="line.152">     * Sets the raw bytes stored by this hash instance.</a>
<span class="sourceLineNo">153</span><a id="line.153">     * &lt;p/&gt;</a>
<span class="sourceLineNo">154</span><a id="line.154">     * The bytes are kept in raw form - they will not be hashed/changed.  This is primarily a utility method for</a>
<span class="sourceLineNo">155</span><a id="line.155">     * constructing a Hash instance when the hashed value is already known.</a>
<span class="sourceLineNo">156</span><a id="line.156">     *</a>
<span class="sourceLineNo">157</span><a id="line.157">     * @param alreadyHashedBytes the raw already-hashed bytes to store in this instance.</a>
<span class="sourceLineNo">158</span><a id="line.158">     */</a>
<span class="sourceLineNo">159</span><a id="line.159">    public void setBytes(byte[] alreadyHashedBytes) {</a>
<span class="sourceLineNo">160</span><a id="line.160">        this.bytes = alreadyHashedBytes;</a>
<span class="sourceLineNo">161</span><a id="line.161">        this.hexEncoded = null;</a>
<span class="sourceLineNo">162</span><a id="line.162">        this.base64Encoded = null;</a>
<span class="sourceLineNo">163</span><a id="line.163">    }</a>
<span class="sourceLineNo">164</span><a id="line.164"></a>
<span class="sourceLineNo">165</span><a id="line.165">    /**</a>
<span class="sourceLineNo">166</span><a id="line.166">     * Returns the JDK MessageDigest instance to use for executing the hash.</a>
<span class="sourceLineNo">167</span><a id="line.167">     *</a>
<span class="sourceLineNo">168</span><a id="line.168">     * @param algorithmName the algorithm to use for the hash, provided by subclasses.</a>
<span class="sourceLineNo">169</span><a id="line.169">     * @return the MessageDigest object for the specified {@code algorithm}.</a>
<span class="sourceLineNo">170</span><a id="line.170">     * @throws UnknownAlgorithmException if the specified algorithm name is not available.</a>
<span class="sourceLineNo">171</span><a id="line.171">     */</a>
<span class="sourceLineNo">172</span><a id="line.172">    protected MessageDigest getDigest(String algorithmName) throws UnknownAlgorithmException {</a>
<span class="sourceLineNo">173</span><a id="line.173">        try {</a>
<span class="sourceLineNo">174</span><a id="line.174">            return MessageDigest.getInstance(algorithmName);</a>
<span class="sourceLineNo">175</span><a id="line.175">        } catch (NoSuchAlgorithmException e) {</a>
<span class="sourceLineNo">176</span><a id="line.176">            String msg = "No native '" + algorithmName + "' MessageDigest instance available on the current JVM.";</a>
<span class="sourceLineNo">177</span><a id="line.177">            throw new UnknownAlgorithmException(msg, e);</a>
<span class="sourceLineNo">178</span><a id="line.178">        }</a>
<span class="sourceLineNo">179</span><a id="line.179">    }</a>
<span class="sourceLineNo">180</span><a id="line.180"></a>
<span class="sourceLineNo">181</span><a id="line.181">    /**</a>
<span class="sourceLineNo">182</span><a id="line.182">     * Hashes the specified byte array without a salt for a single iteration.</a>
<span class="sourceLineNo">183</span><a id="line.183">     *</a>
<span class="sourceLineNo">184</span><a id="line.184">     * @param bytes the bytes to hash.</a>
<span class="sourceLineNo">185</span><a id="line.185">     * @return the hashed bytes.</a>
<span class="sourceLineNo">186</span><a id="line.186">     */</a>
<span class="sourceLineNo">187</span><a id="line.187">    protected byte[] hash(byte[] bytes) {</a>
<span class="sourceLineNo">188</span><a id="line.188">        return hash(bytes, null, 1);</a>
<span class="sourceLineNo">189</span><a id="line.189">    }</a>
<span class="sourceLineNo">190</span><a id="line.190"></a>
<span class="sourceLineNo">191</span><a id="line.191">    /**</a>
<span class="sourceLineNo">192</span><a id="line.192">     * Hashes the specified byte array using the given {@code salt} for a single iteration.</a>
<span class="sourceLineNo">193</span><a id="line.193">     *</a>
<span class="sourceLineNo">194</span><a id="line.194">     * @param bytes the bytes to hash</a>
<span class="sourceLineNo">195</span><a id="line.195">     * @param salt  the salt to use for the initial hash</a>
<span class="sourceLineNo">196</span><a id="line.196">     * @return the hashed bytes</a>
<span class="sourceLineNo">197</span><a id="line.197">     */</a>
<span class="sourceLineNo">198</span><a id="line.198">    protected byte[] hash(byte[] bytes, byte[] salt) {</a>
<span class="sourceLineNo">199</span><a id="line.199">        return hash(bytes, salt, 1);</a>
<span class="sourceLineNo">200</span><a id="line.200">    }</a>
<span class="sourceLineNo">201</span><a id="line.201"></a>
<span class="sourceLineNo">202</span><a id="line.202">    /**</a>
<span class="sourceLineNo">203</span><a id="line.203">     * Hashes the specified byte array using the given {@code salt} for the specified number of iterations.</a>
<span class="sourceLineNo">204</span><a id="line.204">     *</a>
<span class="sourceLineNo">205</span><a id="line.205">     * @param bytes          the bytes to hash</a>
<span class="sourceLineNo">206</span><a id="line.206">     * @param salt           the salt to use for the initial hash</a>
<span class="sourceLineNo">207</span><a id="line.207">     * @param hashIterations the number of times the the {@code bytes} will be hashed (for attack resiliency).</a>
<span class="sourceLineNo">208</span><a id="line.208">     * @return the hashed bytes.</a>
<span class="sourceLineNo">209</span><a id="line.209">     * @throws UnknownAlgorithmException if the {@link #getAlgorithmName() algorithmName} is not available.</a>
<span class="sourceLineNo">210</span><a id="line.210">     */</a>
<span class="sourceLineNo">211</span><a id="line.211">    protected byte[] hash(byte[] bytes, byte[] salt, int hashIterations) throws UnknownAlgorithmException {</a>
<span class="sourceLineNo">212</span><a id="line.212">        MessageDigest digest = getDigest(getAlgorithmName());</a>
<span class="sourceLineNo">213</span><a id="line.213">        if (salt != null) {</a>
<span class="sourceLineNo">214</span><a id="line.214">            digest.reset();</a>
<span class="sourceLineNo">215</span><a id="line.215">            digest.update(salt);</a>
<span class="sourceLineNo">216</span><a id="line.216">        }</a>
<span class="sourceLineNo">217</span><a id="line.217">        byte[] hashed = digest.digest(bytes);</a>
<span class="sourceLineNo">218</span><a id="line.218">        int iterations = hashIterations - 1; //already hashed once above</a>
<span class="sourceLineNo">219</span><a id="line.219">        //iterate remaining number:</a>
<span class="sourceLineNo">220</span><a id="line.220">        for (int i = 0; i &lt; iterations; i++) {</a>
<span class="sourceLineNo">221</span><a id="line.221">            digest.reset();</a>
<span class="sourceLineNo">222</span><a id="line.222">            hashed = digest.digest(hashed);</a>
<span class="sourceLineNo">223</span><a id="line.223">        }</a>
<span class="sourceLineNo">224</span><a id="line.224">        return hashed;</a>
<span class="sourceLineNo">225</span><a id="line.225">    }</a>
<span class="sourceLineNo">226</span><a id="line.226"></a>
<span class="sourceLineNo">227</span><a id="line.227">    /**</a>
<span class="sourceLineNo">228</span><a id="line.228">     * Returns a hex-encoded string of the underlying {@link #getBytes byte array}.</a>
<span class="sourceLineNo">229</span><a id="line.229">     * &lt;p/&gt;</a>
<span class="sourceLineNo">230</span><a id="line.230">     * This implementation caches the resulting hex string so multiple calls to this method remain efficient.</a>
<span class="sourceLineNo">231</span><a id="line.231">     * However, calling {@link #setBytes setBytes} will null the cached value, forcing it to be recalculated the</a>
<span class="sourceLineNo">232</span><a id="line.232">     * next time this method is called.</a>
<span class="sourceLineNo">233</span><a id="line.233">     *</a>
<span class="sourceLineNo">234</span><a id="line.234">     * @return a hex-encoded string of the underlying {@link #getBytes byte array}.</a>
<span class="sourceLineNo">235</span><a id="line.235">     */</a>
<span class="sourceLineNo">236</span><a id="line.236">    public String toHex() {</a>
<span class="sourceLineNo">237</span><a id="line.237">        if (this.hexEncoded == null) {</a>
<span class="sourceLineNo">238</span><a id="line.238">            this.hexEncoded = Hex.encodeToString(getBytes());</a>
<span class="sourceLineNo">239</span><a id="line.239">        }</a>
<span class="sourceLineNo">240</span><a id="line.240">        return this.hexEncoded;</a>
<span class="sourceLineNo">241</span><a id="line.241">    }</a>
<span class="sourceLineNo">242</span><a id="line.242"></a>
<span class="sourceLineNo">243</span><a id="line.243">    /**</a>
<span class="sourceLineNo">244</span><a id="line.244">     * Returns a Base64-encoded string of the underlying {@link #getBytes byte array}.</a>
<span class="sourceLineNo">245</span><a id="line.245">     * &lt;p/&gt;</a>
<span class="sourceLineNo">246</span><a id="line.246">     * This implementation caches the resulting Base64 string so multiple calls to this method remain efficient.</a>
<span class="sourceLineNo">247</span><a id="line.247">     * However, calling {@link #setBytes setBytes} will null the cached value, forcing it to be recalculated the</a>
<span class="sourceLineNo">248</span><a id="line.248">     * next time this method is called.</a>
<span class="sourceLineNo">249</span><a id="line.249">     *</a>
<span class="sourceLineNo">250</span><a id="line.250">     * @return a Base64-encoded string of the underlying {@link #getBytes byte array}.</a>
<span class="sourceLineNo">251</span><a id="line.251">     */</a>
<span class="sourceLineNo">252</span><a id="line.252">    public String toBase64() {</a>
<span class="sourceLineNo">253</span><a id="line.253">        if (this.base64Encoded == null) {</a>
<span class="sourceLineNo">254</span><a id="line.254">            //cache result in case this method is called multiple times.</a>
<span class="sourceLineNo">255</span><a id="line.255">            this.base64Encoded = Base64.encodeToString(getBytes());</a>
<span class="sourceLineNo">256</span><a id="line.256">        }</a>
<span class="sourceLineNo">257</span><a id="line.257">        return this.base64Encoded;</a>
<span class="sourceLineNo">258</span><a id="line.258">    }</a>
<span class="sourceLineNo">259</span><a id="line.259"></a>
<span class="sourceLineNo">260</span><a id="line.260">    /**</a>
<span class="sourceLineNo">261</span><a id="line.261">     * Simple implementation that merely returns {@link #toHex() toHex()}.</a>
<span class="sourceLineNo">262</span><a id="line.262">     *</a>
<span class="sourceLineNo">263</span><a id="line.263">     * @return the {@link #toHex() toHex()} value.</a>
<span class="sourceLineNo">264</span><a id="line.264">     */</a>
<span class="sourceLineNo">265</span><a id="line.265">    public String toString() {</a>
<span class="sourceLineNo">266</span><a id="line.266">        return toHex();</a>
<span class="sourceLineNo">267</span><a id="line.267">    }</a>
<span class="sourceLineNo">268</span><a id="line.268"></a>
<span class="sourceLineNo">269</span><a id="line.269">    /**</a>
<span class="sourceLineNo">270</span><a id="line.270">     * Returns {@code true} if the specified object is a Hash and its {@link #getBytes byte array} is identical to</a>
<span class="sourceLineNo">271</span><a id="line.271">     * this Hash's byte array, {@code false} otherwise.</a>
<span class="sourceLineNo">272</span><a id="line.272">     *</a>
<span class="sourceLineNo">273</span><a id="line.273">     * @param o the object (Hash) to check for equality.</a>
<span class="sourceLineNo">274</span><a id="line.274">     * @return {@code true} if the specified object is a Hash and its {@link #getBytes byte array} is identical to</a>
<span class="sourceLineNo">275</span><a id="line.275">     *         this Hash's byte array, {@code false} otherwise.</a>
<span class="sourceLineNo">276</span><a id="line.276">     */</a>
<span class="sourceLineNo">277</span><a id="line.277">    public boolean equals(Object o) {</a>
<span class="sourceLineNo">278</span><a id="line.278">        if (o instanceof Hash) {</a>
<span class="sourceLineNo">279</span><a id="line.279">            Hash other = (Hash) o;</a>
<span class="sourceLineNo">280</span><a id="line.280">            return MessageDigest.isEqual(getBytes(), other.getBytes());</a>
<span class="sourceLineNo">281</span><a id="line.281">        }</a>
<span class="sourceLineNo">282</span><a id="line.282">        return false;</a>
<span class="sourceLineNo">283</span><a id="line.283">    }</a>
<span class="sourceLineNo">284</span><a id="line.284"></a>
<span class="sourceLineNo">285</span><a id="line.285">    /**</a>
<span class="sourceLineNo">286</span><a id="line.286">     * Simply returns toHex().hashCode();</a>
<span class="sourceLineNo">287</span><a id="line.287">     *</a>
<span class="sourceLineNo">288</span><a id="line.288">     * @return toHex().hashCode()</a>
<span class="sourceLineNo">289</span><a id="line.289">     */</a>
<span class="sourceLineNo">290</span><a id="line.290">    public int hashCode() {</a>
<span class="sourceLineNo">291</span><a id="line.291">        if (this.bytes == null || this.bytes.length == 0) {</a>
<span class="sourceLineNo">292</span><a id="line.292">            return 0;</a>
<span class="sourceLineNo">293</span><a id="line.293">        }</a>
<span class="sourceLineNo">294</span><a id="line.294">        return Arrays.hashCode(this.bytes);</a>
<span class="sourceLineNo">295</span><a id="line.295">    }</a>
<span class="sourceLineNo">296</span><a id="line.296"></a>
<span class="sourceLineNo">297</span><a id="line.297">    private static void printMainUsage(Class&lt;? extends AbstractHash&gt; clazz, String type) {</a>
<span class="sourceLineNo">298</span><a id="line.298">        System.out.println("Prints an " + type + " hash value.");</a>
<span class="sourceLineNo">299</span><a id="line.299">        System.out.println("Usage: java " + clazz.getName() + " [-base64] [-salt &lt;saltValue&gt;] [-times &lt;N&gt;] &lt;valueToHash&gt;");</a>
<span class="sourceLineNo">300</span><a id="line.300">        System.out.println("Options:");</a>
<span class="sourceLineNo">301</span><a id="line.301">        System.out.println("\t-base64\t\tPrints the hash value as a base64 String instead of the default hex.");</a>
<span class="sourceLineNo">302</span><a id="line.302">        System.out.println("\t-salt\t\tSalts the hash with the specified &lt;saltValue&gt;");</a>
<span class="sourceLineNo">303</span><a id="line.303">        System.out.println("\t-times\t\tHashes the input &lt;N&gt; number of times");</a>
<span class="sourceLineNo">304</span><a id="line.304">    }</a>
<span class="sourceLineNo">305</span><a id="line.305"></a>
<span class="sourceLineNo">306</span><a id="line.306">    private static boolean isReserved(String arg) {</a>
<span class="sourceLineNo">307</span><a id="line.307">        return "-base64".equals(arg) || "-times".equals(arg) || "-salt".equals(arg);</a>
<span class="sourceLineNo">308</span><a id="line.308">    }</a>
<span class="sourceLineNo">309</span><a id="line.309"></a>
<span class="sourceLineNo">310</span><a id="line.310">    static int doMain(Class&lt;? extends AbstractHash&gt; clazz, String[] args) {</a>
<span class="sourceLineNo">311</span><a id="line.311">        String simple = clazz.getSimpleName();</a>
<span class="sourceLineNo">312</span><a id="line.312">        int index = simple.indexOf("Hash");</a>
<span class="sourceLineNo">313</span><a id="line.313">        String type = simple.substring(0, index).toUpperCase();</a>
<span class="sourceLineNo">314</span><a id="line.314"></a>
<span class="sourceLineNo">315</span><a id="line.315">        if (args == null || args.length &lt; 1 || args.length &gt; 7) {</a>
<span class="sourceLineNo">316</span><a id="line.316">            printMainUsage(clazz, type);</a>
<span class="sourceLineNo">317</span><a id="line.317">            return -1;</a>
<span class="sourceLineNo">318</span><a id="line.318">        }</a>
<span class="sourceLineNo">319</span><a id="line.319">        boolean hex = true;</a>
<span class="sourceLineNo">320</span><a id="line.320">        String salt = null;</a>
<span class="sourceLineNo">321</span><a id="line.321">        int times = 1;</a>
<span class="sourceLineNo">322</span><a id="line.322">        String text = args[args.length - 1];</a>
<span class="sourceLineNo">323</span><a id="line.323">        for (int i = 0; i &lt; args.length; i++) {</a>
<span class="sourceLineNo">324</span><a id="line.324">            String arg = args[i];</a>
<span class="sourceLineNo">325</span><a id="line.325">            if (arg.equals("-base64")) {</a>
<span class="sourceLineNo">326</span><a id="line.326">                hex = false;</a>
<span class="sourceLineNo">327</span><a id="line.327">            } else if (arg.equals("-salt")) {</a>
<span class="sourceLineNo">328</span><a id="line.328">                if ((i + 1) &gt;= (args.length - 1)) {</a>
<span class="sourceLineNo">329</span><a id="line.329">                    String msg = "Salt argument must be followed by a salt value.  The final argument is " +</a>
<span class="sourceLineNo">330</span><a id="line.330">                            "reserved for the value to hash.";</a>
<span class="sourceLineNo">331</span><a id="line.331">                    System.out.println(msg);</a>
<span class="sourceLineNo">332</span><a id="line.332">                    printMainUsage(clazz, type);</a>
<span class="sourceLineNo">333</span><a id="line.333">                    return -1;</a>
<span class="sourceLineNo">334</span><a id="line.334">                }</a>
<span class="sourceLineNo">335</span><a id="line.335">                salt = args[i + 1];</a>
<span class="sourceLineNo">336</span><a id="line.336">            } else if (arg.equals("-times")) {</a>
<span class="sourceLineNo">337</span><a id="line.337">                if ((i + 1) &gt;= (args.length - 1)) {</a>
<span class="sourceLineNo">338</span><a id="line.338">                    String msg = "Times argument must be followed by an integer value.  The final argument is " +</a>
<span class="sourceLineNo">339</span><a id="line.339">                            "reserved for the value to hash";</a>
<span class="sourceLineNo">340</span><a id="line.340">                    System.out.println(msg);</a>
<span class="sourceLineNo">341</span><a id="line.341">                    printMainUsage(clazz, type);</a>
<span class="sourceLineNo">342</span><a id="line.342">                    return -1;</a>
<span class="sourceLineNo">343</span><a id="line.343">                }</a>
<span class="sourceLineNo">344</span><a id="line.344">                try {</a>
<span class="sourceLineNo">345</span><a id="line.345">                    times = Integer.valueOf(args[i + 1]);</a>
<span class="sourceLineNo">346</span><a id="line.346">                } catch (NumberFormatException e) {</a>
<span class="sourceLineNo">347</span><a id="line.347">                    String msg = "Times argument must be followed by an integer value.";</a>
<span class="sourceLineNo">348</span><a id="line.348">                    System.out.println(msg);</a>
<span class="sourceLineNo">349</span><a id="line.349">                    printMainUsage(clazz, type);</a>
<span class="sourceLineNo">350</span><a id="line.350">                    return -1;</a>
<span class="sourceLineNo">351</span><a id="line.351">                }</a>
<span class="sourceLineNo">352</span><a id="line.352">            }</a>
<span class="sourceLineNo">353</span><a id="line.353">        }</a>
<span class="sourceLineNo">354</span><a id="line.354"></a>
<span class="sourceLineNo">355</span><a id="line.355">        Hash hash = new Md2Hash(text, salt, times);</a>
<span class="sourceLineNo">356</span><a id="line.356">        String hashed = hex ? hash.toHex() : hash.toBase64();</a>
<span class="sourceLineNo">357</span><a id="line.357">        System.out.print(hex ? "Hex: " : "Base64: ");</a>
<span class="sourceLineNo">358</span><a id="line.358">        System.out.println(hashed);</a>
<span class="sourceLineNo">359</span><a id="line.359">        return 0;</a>
<span class="sourceLineNo">360</span><a id="line.360">    }</a>
<span class="sourceLineNo">361</span><a id="line.361">}</a>




























































</pre>
</div>
</main>
</body>
</html>
