Python 86

단일 치환 암호 해독 (패턴 분석 공격) - 공부하는 도비

단일 치환 암호는 무차별 대입 공격이나 빈도수 분석을 통하여 암호문을 해독할 수 있습니다. 오늘은 단일 치환 암호를 해독하는 방법 중 패턴 분석을 사용하여 암호를 분석해보려고 합니다. 패턴 분석 방법은 Known plaintext Attack 방법 중 하나로, "공격자가 일정 부분의 평문과 이에 대응하는 암호문을 가진 상태에서 공격하는 유형"을 의미합니다. 알려진 평문 공격을 하면, 단순히 무차별 대입 공격이나 빈도수 분석을 하는 것보다 암호문 해독이 더 수월해집니다. 예시를 통하여 패턴 분석을 해보도록 하겠습니다. 아래는 단일 치환 암호로 암호화 한 문장입니다. 만약 빈도수 분석을 하면, 여기서 가장 많이 나온 글자를 찾아 알바벳 빈두수에 따라 하나하나 치환하며 암호문을 해독해야 합니다. 위 암호문에 ..

Python/Project 2022.11.14

버블 정렬 (오름차순 정렬) - 공부하는 도비

파이썬엔 sort라는 좋은 함수가 있어, 굳이 정렬 함수를 작성하진 않아도 된다. 하지만, 정리해두면 누군가에겐 도움이 되지 않을까해서 글을 쓰고 있다. 우선 sort 함수를 쓰면 정말 간단하게 배열을 정렬할 수 있다. 자세한 내용은 아래 링크를 활용하면 좋을 듯 합니다. 2020.12.23 - [파이썬/파이썬 이론] - [파이썬] 정렬하기 list.sort(), sorted(), 키 함수 사용 - 공부하는 도비 [파이썬] 정렬하기 list.sort(), sorted(), 키 함수 사용 - 공부하는 도비 오늘은 파이썬 정렬함수에 대해 알아보겠습니다.! 파이썬에서 정렬가능 함수는 list.sort()함수와 sorted()함수 두가지 있습니다. * list.sort() 와 sorted() 함수 차이 list..

Python/Python Basic 2022.10.28

파이썬 y축 중간 생략(broken yaxis) + 더블 y축(twinx) 그래프 그리기 - 공부하는 도비

지난 피드에서 파이썬 y축 중간 생략 그래프와 파이썬 더블 y축 그래프를 그려보았습니다. 각각 내용에 대해서는 아래 링크를 참고해주세요. 오늘은 이 두 가지를 합친 그래프를 그려볼게요!. 2022.10.20 - [파이썬/파이썬 시각화 (colab)] - [파이썬 시각화] 파이썬 y축 중간 생략 그래프 그리기 - 공부하는 도비 [파이썬 시각화] 파이썬 y축 중간 생략 그래프 그리기 - 공부하는 도비 y축 중간 생략 그래프는 그래프를 그릴 때 각 항목들 간 데이터 크기 차이가 많이 날 때 쓰는 방식으로 이 방법을 사용하면, 완성된 그래프의 퀄리티도 좋아지고 확실히 눈에 잘 들어오게 됩니다 yang-wistory1009.tistory.com 2022.10.22 - [파이썬/파이썬 시각화 (colab)] - [..

파이썬 더블 y축 그래프 그리기 (plt.twinx()) - 공부하는 도비

오늘은 파이썬으로 y축 두 개를 가진 그래프를 그려볼게요. 그냥 하나의 y축을 가진 그래프는 쉽게 그릴 수 있어요. 왼쪽 y축을 ax_1으로 두고, 오른쪽 y축을 ax_2로 설정했습니다. import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 그래프 설정 sns.set(rc={"figure.figsize":(8,6)}) plt.rcParams['lines.linewidth'] = 4.0 plt.rcParams['boxplot.flierprops.markersize'] = 10 sns.set_style("white") ax_1 = sns.barplot() plt.show() 더블 y축을 하는 방법은, plt.twinx()을 사..

파이썬 y축 중간 생략 그래프 (broken yaxis) 그리기 - 공부하는 도비

y축 중간 생략 그래프는 그래프를 그릴 때 각 항목들 간 데이터 크기 차이가 많이 날 때 쓰는 방식으로 이 방법을 사용하면, 완성된 그래프의 퀄리티도 좋아지고 확실히 눈에 잘 들어오게 됩니다. 아래 그래프는 같은 데이터를 사용하여 두 가지 버전의 그래프를 그린 결과입니다. y축의 scale이 log 임에도 불구하고, A의 항목이 다른 항목에 비해 데이터 크기가 매우 크다는 걸 알 수 있습니다. 만약에 scale이 log가 아니라면, B와 C 항목은 보이지도 않습니다. ㅎㅎ 파이썬에서 y축 중간 생략 그래프를 그리기 위해선, subplot을 활용합니다. 즉, 두가지 그래프에 각각 그래프를 그려두고, 각 subplot의 ylim을 조정하면서 마치 중간그래프가 생략된 거처럼 만드는 거죠! 아래 코드에서는 su..

uuid를 활용한 해시 함수의 seed 사용 - 공부하는 도비

uuid 모듈이란? 네트워크 상에서 중복되지 않는 고유한 식별자인 UUID(Universally Unique Identifier)를 생성하기 위해 사용되는 모듈입니다. UUID는 기본적으로 16바이트(128비트)의 숫자이고, 이 숫자는 32개의 16진수로 구성되며, 5개의 그룹으로 표시되고 각 그룹은 하이픈(-)으로 구분됩니다. 파이썬에선, 별 다른 설치 없이 uuid 모듈을 import 한 뒤 uuid.uuid4()를 출력하면, UUID를 얻을 수 있습니다. 이렇게 생성한 UUID를 해시 함수의 seed 로서 사용해보겠습니다. (여기선, seed를 단순히 해시 함수의 입력 값으로 봐도 무관합니다.!) import uuid import hashlib def HashFunction(text): hex_ha..

Python 2022.03.05

hashlib을 이용한 binary hash value 생성 - 공부하는 도비

HASH 함수란? 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수입니다. 함수의 입력 값의 길이가 어떠하든, 결과 값의 길이는 항상 동일하다는 것이 해시함수의 특징입니다. 또한, 동일한 데이터를 입력 값으로 사용할 경우, 결과는 시간이 지나도 같게 나오게 됩니다. 해시 함수의 종류에는, MD5, SHA(SHA-1, SHA-256, SHA-512, SHA-3) 등이 있습니다. 아래 링크는 SHA256을 통해서 해시값을 만들어 볼 수 있는 사이트입니다. https://www.convertstring.com/ko/Hash/SHA256 SHA256 해시 - 온라인 SHA256 해시 생성기 www.convertstring.com 보통 해시 값이라는 건 16진수로 결과가 나오게 되는데, 오늘 제가 알아..

Python 2022.03.05

enumerate 내장 함수로 for문 돌리 - 공부하는 도비

많은 프로그램 언어가 특정 변수(ex. i, j, k)를 증가시켜가면서 반복문을 수행합니다. 하지만, 파이썬에서는 enumerate()라는 내장 함수로 이러한 변수 없이 독특한 방식으로 반복문을 돌릴 수 있습니다. for __ in __: 가장 기본적인 for문은 for in : 형태로 작성이 됩니다. 예를 들어, 3개의 숫자를 담고 있는 리스트를 for 문으로 출력해보는 코드를 작성해보겠습니다. 해당 리스트의 인덱스도 함께 출력하고 싶을 땐 어떻게 해야할까요?. 제일 간단한 방법은 새로운 변수를 하나 두고 변수의 값을 증가시키며 출력하는 것입니다. 아마 C언어나 다른 언어를 하다가 파이썬을 하시면, 제일 먼저 떠올리는 방법 중 하나일 것 같습니다. 하지만, 프로그램이 종료되어도 변수(index)라는 값..

Python/Python Basic 2021.12.06

for 문을 사용하여 list 값 remove 할 때 주의 할 점 - 공부하는 도비

리스트에 있는 값을 for문으로 하나하나 삭제해보려고 했지만, 계속 리스트 범위를 벗어났다는 등의 오류가 났습니다. 다음 코드를 보며, 어떤 오류가 있는지 살펴보겠습니다. test = list(range(0, 10)) # test = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print("original test : ", test) for i in test: test.remove(i) print(test) 해당 코드를 실행시키면, 위와 같은 결과가 나옵니다. 문제의 원인은, 첫 번째 루프 때는 test의 0번째 원소를 지우므로 리스트는 [1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다. 두 번째 for문을 돌 때는, test의 1번째 원소(test = [1, 2, 3, 4, 5, 6..

Python/Python Basic 2021.11.08

백준 1934번 문제 풀이 - 공부 하는 도비

https://www.acmicpc.net/problem/1934 1934번: 최소공배수 두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있 www.acmicpc.net 최소 공배수를 구하는 문제입니다. 제가 예전에 유클리드 호제법에 관한 내용을 포스팅한 적이 있습니다. gcd(greatest common divisor) 즉, 최대 공약수를 구하는 방법은 아래 링크를 확인해주세요. 2021.05.21 - [파이썬/프로젝트] - [파이썬] 유클리드 알고리즘(Euclidean Algorithm) - 공부하는 도비 [파이썬] 유클리드 알고리즘(Euc..

Python/Baekjoon 2021.11.01