Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- GIT
- javascript
- 랜섬웨어
- 보안뉴스한줄요약
- 자바스크립트 node
- oracle
- 오라클
- php
- 자바스크립트 prototype
- 다크웹
- 보안뉴스 요약
- 보안뉴스요약
- 카카오프로젝트
- 자바스크립트 객체
- 깃허브
- ES6
- python
- 보안뉴스
- 파이썬
- 자바스크립트 element api
- 자바스크립트 API
- 카카오프로젝트 100
- oracle db
- numpy
- 자바스크립트
- Oracle SQL
- 보안뉴스 한줄요약
- 자바스크립트 기본 문법
- 자바스크립트 jQuery
- 카카오프로젝트100
Archives
- Today
- Total
FU11M00N
[ Python ] RC4 알고리즘 본문
- RC4
스트림 암호 종류 중 하나이다.
주로 4 계층 보안 TLS,SSL , WEB 등 프로토콜에 사용되었다.
하지만 현재 취약점이 발견되어 권장하는 프로토콜은 아니다.
알고리즘으로 구현하기 위해 바이트의 개수 256개를 뒤섞고,
256개의 가능한 바이트 중 하나를 골라 해당 값을 키 스트림을 사용하여 평문과 XOR연산으로 암호화한다.
이 후 두 개의 위치만 바꾸어 섞은 후 다시 특정 위치의 바이트를 키스트림으로 반복하여 사용한다.
RC4 알고리즘을 짜기위해 www.youtube.com/watch?v=kfdvlaOD1ig&t=172s영상을 참고했다.
def msg_enc(msg,s): # 암호문을 XOR 한번 더하여 복호화
i=0
j=0
stream_key= []
msg=msg.encode()
enc_value=bytearray()
for k in range(len(msg)):
i=(i+1) % 256
j=(j+s[i]) % 256
s[i],s[j]=s[j],s[i]
stream_key.append(s[(s[i] + s[j])%256])
enc_value.append( msg[k] ^ stream_key[k])
return enc_value
def msg_dec(enc_value,s): # 스트림키 생성 및 XOR연산하여 암호문 생성
i=0
j=0
stream_key= []
dec_value=bytearray()
for k in range(len(enc_value)):
i=(i+1) % 256
j=(j+s[i]) % 256
s[i],s[j]=s[j],s[i]
stream_key.append(s[(s[i] + s[j])%256])
dec_value.append(enc_value[k] ^ stream_key[k])
return dec_value
def key_init(key): # 스트림 키 초기화
key = key.encode()
j=0
s= []
for i in range(0,256):
s.append(i)
for i in range(0,256):
j=(j + s[i] + key[i%len(key)]) %256
s[i],s[j] = s[j],s[i]
return s
def main():
print("메세지 입력")
msg=input()
print("키 입력")
key=input()
s=key_init(key)
enc_value=msg_enc(msg,s)
print("암호화 값 : ",enc_value)
dec_value=msg_dec(enc_value,key_init(key))
print("복호화 값 : ", dec_value)
main()
'Programming > Python' 카테고리의 다른 글
[ python ] socket 프로그래밍 - 다양한 데이터 보내기 (feat. pickle 직렬화) (1) | 2021.05.28 |
---|---|
[ Python ] 파이썬 Diffie-Hellman 구현 (0) | 2021.05.21 |
[ Python ] python SHA512값 구하기 , SHA512 특징, SHA512 처리 단계 , (0) | 2021.03.26 |
[ Python ] 아나콘다 (Anaconda) 설치하기. (0) | 2021.03.12 |
[Python] 연산자 오버로딩 (0) | 2020.11.24 |
Comments