XOR 암호화를 쓰는 이유!!
가장 간단하게 만들 수 있고, CPU스트레스도 적기 때문이랄까...
거기다가... XOR 암호화가... 원본값과 암호화된 값의 일치성 찾기가 꾀나 까다로운탓에... ㄲㄲ;
Function Encryption(ByRef XDATA() As Byte, ByVal SEED As Byte) As Boolean
On Error Resume Next
Dim i As UInt64
For i = 0 To UBound(XDATA, 1) Step 1
XDATA(i) = (XDATA(i) Xor SEED) And 255
Next i
Return True
End Function
C언어에서는 ^= 라는 비트연산자를 통해 XOR(베타적 논리합) 을 계산할 수 있다는...
SEED 값은 랜덤의 0 ~ 255 값을 주면 된다.
소켓통신에서 쓰려고 짜본건데... 매 패킷을 생성해낼때마다 이 함수로 암호화 해주면 좋을듯...
클라이언트에서 서버로의 송신은 암호화를 해주고... 서버에서 클라이언트로의 송신은...
주로 서버는 클라이언트 요청에 응답하는 내용이 대부분일거고, 서버 특성상 다수의 클라이언트와 연결되어 있는 탓에
쉽게 스트레스를 받게될테니... 이 경우에는 노멀패킷을 그대로 송신하는 편이 좋을듯 싶다...
하지만, 서버에서 수신한 데이터의 복호화 탓에 이 모듈은 서버와 클라이언트 둘 다 가지고 있어야한다는. ㄲㄲ;;
사용법은!!
Randomize '일단 난수생성기를 초기화하고
SEED = (Rnd * 256) And 255 '0~255의 랜덤한 값을 생성한다.
SDATA() = StrConv("abcdef", vbFromUnicode) 'SDATA 라는 바이트배열에 원본 데이터를 집어넣고 (예제는 6바이트의 abcdef 이다)
ReDim XDATA(UBound(SDATA(), 1)) '레퍼런드로 반환될 값을 받을 바이트배열변수 역시 같은 길이로 설정한다.
그리고나서 XDATA 라는 바이트배열변수를 보면 XOR 연산된 값이 들어간다는...
복호화는 암호화할때 썻던 랜덤SEED 값과 위에 XOR연산된 값을 넣어주면 된다는...



최근 덧글