⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmac.java

📁 《移动Agent技术》一书的所有章节源代码。
💻 JAVA
字号:
package org.bouncycastle.crypto.macs;import org.bouncycastle.crypto.*;import org.bouncycastle.crypto.params.KeyParameter;/** * HMAC implementation based on RFC2104 * * H(K XOR opad, H(K XOR ipad, text)) */public class HMacimplements Mac{	private final static int BLOCK_LENGTH = 64;	private final static byte IPAD = (byte)0x36;	private final static byte OPAD = (byte)0x5C;	private Digest digest;	private int digestSize;    private byte[] inputPad = new byte[BLOCK_LENGTH];	private byte[] outputPad = new byte[BLOCK_LENGTH];	public HMac(		Digest digest)	{		this.digest = digest;		digestSize = digest.getDigestSize();	}	public String getAlgorithmName()	{		return digest.getAlgorithmName() + "/HMAC";	}    public Digest getUnderlyingDigest()    {        return digest;    }	public void init(		CipherParameters params)	{		digest.reset();		byte[] key = ((KeyParameter)params).getKey();		if (key.length > BLOCK_LENGTH)		{			digest.update(key, 0, key.length);			digest.doFinal(inputPad, 0);		    for (int i = digestSize; i < inputPad.length; i++)            {                inputPad[i] = 0;            }		}		else		{			System.arraycopy(key, 0, inputPad, 0, key.length);		    for (int i = key.length; i < inputPad.length; i++)            {                inputPad[i] = 0;            }		}		outputPad = new byte[inputPad.length];        System.arraycopy(inputPad, 0, outputPad, 0, inputPad.length);		for (int i = 0; i < inputPad.length; i++)		{			inputPad[i] ^= IPAD;		}		for (int i = 0; i < outputPad.length; i++)		{			outputPad[i] ^= OPAD;		}		digest.update(inputPad, 0, inputPad.length);	}	public int getMacSize()	{		return digestSize;	}	public void update(		byte in)	{		digest.update(in);	}	public void update(		byte[] in,		int inOff,		int len)	{		digest.update(in, inOff, len);	}	public int doFinal(		byte[] out,		int outOff)	{		byte[] tmp = new byte[digestSize];		digest.doFinal(tmp, 0);		digest.update(outputPad, 0, outputPad.length);		digest.update(tmp, 0, tmp.length);		return digest.doFinal(out, outOff);	}	/**	 * Reset the mac generator.	 */	public void reset()	{		/*		 * reset the underlying digest.		 */		digest.reset();        /*         * reinitialize the digest.         */		digest.update(inputPad, 0, inputPad.length);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -