pkcs5.java
来自「jpeg2000编解码」· Java 代码 · 共 131 行
JAVA
131 行
// $Id: PKCS5.java,v 1.1.1.1 2002/08/27 12:32:12 grosbois Exp $//// $Log: PKCS5.java,v $// Revision 1.1.1.1 2002/08/27 12:32:12 grosbois// Add cryptix 3.2//// Revision 1.7 2000/08/17 11:40:59 edwin// java.* -> xjava.*//// Revision 1.6 1997/12/09 05:15:48 raif// *** empty log message ***//// 1997.12.09 --RSN// + added some documentation.//// Revision 1.5 1997/12/07 07:29:12 hopwood// + Replaced reference to blockSize with 8, for better compatibility with// Sun's JCE.//// Revision 1.4 1997/11/20 19:42:48 hopwood// + cryptix.util.* name changes.//// Revision 0.1.0.0 1997/11/17 D. Hopwood// + New version based on PKCS7.java.//// $Endlog$/* * Copyright (c) 1997 Systemics Ltd * on behalf of the Cryptix Development Team. All rights reserved. */package cryptix.provider.padding;import cryptix.CryptixException;/** * A class for padding cipher data according to the following scheme, * described in section 6.2 of RSA Data Security, Inc.'s PKCS #5 * standard: * <p> * <pre> * ... * </pre> * <p> * An IllegalBlockSizeException is thrown (by the Cipher class) if * the block size is not 8 bytes. * <p> * <b>References:</b> * <ol> * <li> <cite>PKCS#5: ... An RSA * Laboratories Technical Note</cite>; * Version 1.5; Revised November 1, 1993. * </ol> * <p> * <b>Copyright</b> © 1997 * <a href="http://www.systemics.com/">Systemics Ltd</a> on behalf of the * <a href="http://www.systemics.com/docs/cryptix/">Cryptix Development Team</a>. * <br>All rights reserved. * <p> * <b>$Revision: 1.1.1.1 $</b> * @author Raif S. Naffah * @author David Hopwood * @since Cryptix 2.2.2 */public class PKCS5extends xjava.security.PaddingScheme{ /** Creates a PKCS5 object. */ public PKCS5() { super("PKCS#5"); } /** * Pads a given array of bytes. The padding is written to the same buffer * that is used for input (<i>in</i>). When this method returns, the padded * block will be stored at <code>in[offset+length..offset+7]</code>. * * @param in the buffer containing the incomplete block. * @param offset the offset into the <code>in</code> buffer of the * first byte in the group of bytes to be padded. * @param length the number of bytes from the <code>in</code> buffer, * starting at <code>offset</code>, that need to be padded. */ protected int enginePad(byte[] in, int offset, int length) { int padLen = padLength(length); byte padChar = (byte) padLen; int j = offset + length; for (int i = 0; i < padLen; i++) in[j++] = padChar; return padLen; } /** * Given the specified subarray of bytes that includes padding bytes, returns * the index indicating where padding starts. * <p> * For PKCS#5, the padding bytes all have value * <code>8 - (length % 8)</code>. Hence to find the number * of added bytes, it's enough to consider the last byte value of the * padded message. * * @param in the buffer containing the bytes. * @param offset the offset into the <i>in</i> buffer of the * first byte in the block. * @param length the length of the block in bytes. * @return the index into the <i>in</i> buffer indicating * where the padding starts. * @exception CryptixException if the number of padding bytes is invalid. */ protected int engineUnpad(byte[] in, int offset, int length) { int n = offset + length - 1; if (n >= 0) { if (in[n] > 8) throw new CryptixException(getAlgorithm() + ": Invalid number of padding bytes"); else return offset + length - (in[offset + length - 1] & 0xFF) ; } else return 0; } /** * <b>SPI</b>: Returns true if <i>size</i> is a valid block size (in * bytes) for this algorithm. * <p> * For PKCS#5 padding, the only valid <i>size</i> is 8 bytes. */ protected boolean engineIsValidBlockSize(int size) { return size == 8; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?