저번 한국암호포럼에서 주최한 LEA 구현 경진대회를 준비하면서 블록암호를 복호화, 암호화하기 위해서는 rotate left, rotate right 필요하였다. 


그래서 열심히 찾다가

어떤분이 rotate letf를 구현해놓으셨다.

http://www.herongyang.com/Java/Bit-String-Left-Rotation-All-Bits-in-Byte-Array.html


In many applications, information must be stored and operated as bit strings. Unfortunately, Java does not provide any built-in data types or classes to support bit strings. There are several third party BitString classes that you can use to store and manage your bit strings.

대충 요약해보면 자바에서 기본적으로 제공하는 bit처리하는 클래스가 없어서 구현하였다고 한다.


setbit는 bit를 각자리에 bit를 set해주고 getbit 각자리에 bit를 구하는 것이다.

rotateleft까지 있는데 rotate right는 없어서 setbit, getbit를 통해 구현하였다.


rotateRight

 private byte[] rotateRight(byte[] in, int len, int step) {

        int numOfBytes = (len-1)/8 + 1;

        byte[] out = new byte[numOfBytes];

        int check;

        int st = step;

        for (int i=0; i<len; i++) {

            check = i - step;

            if(check < 0)

            {

                check = len - st;

                --st;

            }

            int val = getBit(in, (check)%len);

            setBit(out,i,val);

        }

        return out;

    }

+ Recent posts