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




























































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