본문 바로가기

디지털포렌식(Digital forensic)/알파벳

bit shift 암호, 75, 79, 82, 69, 65

반응형

출처: www.komando.com

2진수 비트를 이용한 암호화 방법은 전문적인 방법은 아니다.

암호화의 개념을 이해하고 디지털을 이용해 흥미를 갖는 용도 정도로만 사용하길 바란다.

비트 시프트(bit shift) 연산은 16진수를 2진수로 표현하며 지정된 비트만큼 좌측 또는 우측으로

비트를 옮기고 빈 자리에 0 또는 1을 채우는 방식으로 만든다.

 

비트 시프트 연산에는 두 가지 유형이 있습니다: 왼쪽 시프트(Left Shift)와 오른쪽 시프트(Right Shift)다.

  1. 왼쪽 시프트 (Left Shift):
    왼쪽 시프트는 이진수를 왼쪽으로 이동시키는 연산 방식이다.
    이동하는 만큼 값이 2의 거듭제곱 배가 된다.
    예를 들어, 1을 2번 왼쪽으로 시프트하면 4가 된다. 0001(0x01) ▶ 0100(0x04)

  2. 오른쪽 시프트 (Right Shift):
    오른쪽 시프트는 이진수를 오른쪽으로 이동시키는 연산이다.
    이동하는 만큼 값이 2의 거듭제곱 배로 줄어든다.

비트시프트 기호는 좌측은 << 을, 우측은 >>을 사용한다.

아래는 16진수로 A부터 F까지를 1비트씩 좌측으로 시프트하고 빈자리에 0을 채운 결과다.

(빈자리에 1을 채울수도 있다.)

 

0x0A = 00001010 , 좌측으로 1비트를 옮기면 00010100 = 0x14

0x0B = 00001011 , 좌측으로 1비트를 옮기면 00010110 = 0x16

0x0C = 00001100 , 좌측으로 1비트를 옮기면 00011000 = 0x18

0x0D = 00001101 , 좌측으로 1비트를 옮기면 00011010 = 0x1A

0x0E = 00001110 , 좌측으로 1비트를 옮기면 00011100 = 0x1C

0x0F = 00001111 , 좌측으로 1비트를 옮기면 00011110 = 0x1E

 

 

아래 코드는 좌측 시프트를 사용하여 간단한 암호화 및 복호화를 구현한 코드다.

using System;

class Program
{
    static void Main()
    {
        byte[] values = { 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F };

        foreach (byte value in values)
        {
            byte shiftedValue = (byte)(value << 1);
            Console.WriteLine($"Original: 0x{value:X2} ({Convert.ToString(value, 2).PadLeft(8, '0')})");
            Console.WriteLine($"Shifted:  0x{shiftedValue:X2} ({Convert.ToString(shiftedValue, 2).PadLeft(8, '0')})\n");
        }
    }
}

위 코드를 실행한 결과는 아래와 같다.

만약, 우측으로 시프트를 하고 싶다면

byte shiftedValue = (byte)(value << 1); 이 부분을

byte shiftedValue = (byte)(value >> 1); 이렇게 바꾼다.

 

그 결과는 이와 같다.


ASCII 코드값 75, 79, 82, 69, 65

 

무슨 단어일까?

728x90