如何在字节数组上添加填充?

时间:2013-10-20 07:30:18

标签: java encryption padding

我在byteArray大小 8 中有 40位键,我想添加0填充,直到它变为 56位即可。

byte[] aKey = new byte [8];  // How I instantiated my byte array

任何想法如何?

3 个答案:

答案 0 :(得分:8)

8字节数组是64位。如果将数组初始化为

byte[] aKey = new byte [8]

所有字节都用0进行初始化。如果你设置前40位,即5个字节,那么你的其他3个字节,即从41到64位仍然设置为0.因此,默认情况下,从第41位到第56位设置为0并且你没有不得不重置它们。

但是,如果您的数组已经使用某些值进行了初始化,并且您希望清除41到56之间的位,那么有几种方法可以做到这一点。

<强>首先: 你可以设置aKey[5] = 0aKey[6] = 0这将设置从第41位到第56位的第6个再见和第7个字节为0

第二:如果您正在处理位,您也可以使用BitSet。但是,在您的情况下,我看到第一种方法更容易,特别是,如果您是Java 7之前的一些,下面的一些方法不存在,您必须编写your own methods以从字节数组转换为位集和副本-versa。

byte[] b = new byte[8];
BitSet bitSet = BitSet.valueOf(b);
bitSet.clear(41, 56); //This will clear 41st to 56th Bit
b = bitSet.toByteArray();

注意:BitSet.valueOf(byte[])BitSet.toByteArray()仅存在于Java 7中。

答案 1 :(得分:4)

使用System.arraycopy()在数组的开头插入两个字节(56-40 = 16位)。

static final int PADDING_SIZE = 2;

public static void main(String[] args) {
    byte[] aKey = {1, 2, 3, 4, 5, 6, 7, 8}; // your array of size 8
    System.out.println(Arrays.toString(aKey));
    byte[] newKey = new byte[8];
    System.arraycopy(aKey, 0, newKey, PADDING_SIZE, aKey.length - PADDING_SIZE); // right shift
    System.out.println(Arrays.toString(newKey));
}

答案 2 :(得分:0)

番石榴的com.google.common.primitives.Bytes.ensureCapacity

aKey = Bytes.ensureCapacity(aKey , 56/8, 0);

或者自从JDK6开始使用Java本机工具:

aKey = java.util.Arrays.copyOf(aKey , 56/8);