Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.nio.ByteBuffer;
- import java.nio.ByteOrder;
- public class ZendosXorEncryption {
- public byte[] xor(byte[] keyBytes, int keyOffset, byte[] inputBytes) {
- if ((keyOffset < 0) || (keyBytes.length < keyOffset + inputBytes.length))
- throw new Exception("Offset is illegal: " + keyOffset);
- if (inputBytes.length > keyBytes.length)
- throw new Exception("key is not big enough");
- byte[] outputBytes = new byte[inputBytes.length];
- for (int i = 0; i < outputBytes.length; i++)
- outputBytes[i] = ((byte)(keyBytes[(keyOffset + i)] ^ inputBytes[i]));
- return outputBytes;
- }
- public byte[] xor(byte[] keyBytes, int keyOffset, byte[] inputBytes, int headerInt) {
- int i = 0;
- if ((keyOffset < 0) || (keyBytes.length < keyOffset + inputBytes.length))
- throw new Exception("Offset is illegal: " + keyOffset);
- if (inputBytes.length > keyBytes.length)
- throw new Exception("key is not big enough");
- byte[] outputBytes = new byte[8 + inputBytes.length];
- byte[] headerAsbytes = intToLittleEndianBytes(headerInt);
- System.arraycopy(headerAsbytes, 0, outputBytes, 0, headerAsbytes.length);
- byte[] keyOffsetAsBytes = intToLittleEndianBytes(keyOffset);
- System.arraycopy(keyOffsetAsBytes, 0, outputBytes, headerAsbytes.length, keyOffsetAsBytes.length);
- for (int j = headerAsbytes.length + keyOffsetAsBytes.length; j < outputBytes.length; j++) {
- outputBytes[j] = ((byte)(keyBytes[(keyOffset + i)] ^ inputBytes[i]));
- i++;
- }
- return outputBytes;
- }
- public static byte[] intToLittleEndianBytes(int intToEncode) {
- ByteBuffer localByteBuffer = ByteBuffer.allocate(4);
- localByteBuffer.putInt(intToEncode);
- localByteBuffer.order(ByteOrder.LITTLE_ENDIAN);
- return localByteBuffer.array();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement