private byte[] PrepareDESKey (byte[] key56bits, int position)
{
// convert to 8 bytes
byte[] key = new byte [8];
key [0] = key56bits [position];
key [1] = (byte) ((key56bits [position] << 7) | (key56bits [position + 1] >> 1));
key [2] = (byte) ((key56bits [position + 1] << 6) | (key56bits [position + 2] >> 2));
key [3] = (byte) ((key56bits [position + 2] << 5) | (key56bits [position + 3] >> 3));
key [4] = (byte) ((key56bits [position + 3] << 4) | (key56bits [position + 4] >> 4));
key [5] = (byte) ((key56bits [position + 4] << 3) | (key56bits [position + 5] >> 5));
key [6] = (byte) ((key56bits [position + 5] << 2) | (key56bits [position + 6] >> 6));
key [7] = (byte) (key56bits [position + 6] << 1);
return key;
}