[보안] C# AES-256 암복호화 알고리즘
·
IT/기술 정리
📌 개요  [ XOR 암복호화 알고리즘 ] [보안] C# XOR 암복호화 알고리즘📌 개요  유니티로 로컬 데이터 저장을 개발하다 json으로 직렬화하여 데이터를 저장하는 기능을 구현하였습니다.   그런데... 날 것으로 저장하니 데이터가 훤히 보이네요ㄷㄷ... 아무래도gus6615.tistory.com 이전에 XOR 암복호화에 대해 알아봤었습니다. 하지만 이 알고리즘을 사용하면 보안이 취약하다는 점이 있습니다. 지난 포스팅을 요약하자면,    "AAAAAAAAAAAAAAAA" 와 같은 평문을 사용하면 일정한 패턴이 발생해요.     패턴을 평문과 다시 XOR하면 Key을 확보할 수 있습니다. 이처럼 XOR 암복호화에는 큰 보안 문제점이 존재합니다. 그래서 이번에는 보안이 좋고 대중적으로 쓰이는 AES..
[보안] C# XOR 암복호화 알고리즘
·
IT/기술 정리
📌 개요  유니티로 로컬 데이터 저장을 개발하다 json으로 직렬화하여 데이터를 저장하는 기능을 구현하였습니다.   그런데... 날 것으로 저장하니 데이터가 훤히 보이네요ㄷㄷ... 아무래도 암호화와 복호화 과정을 통해 유저가 뜯어 고치지 못하게 해야겠군요. 구글링을 해보니 XOR 암복호화 방식이 간단하네요. 당장 구현을 시작해보겠습니다.    XOR 암복호화란?  XOR 암복호화 : 데이터의 각 비트를 암호화 키와 XOR 연산(배타적 논리합)을 수행하는 암복호화 기법 정확히 말하자면 평문의 각 비트를 암호화 키의 비트와 XOR 연산을 수행하여 비트 배열을 난독화시킵니다. 자세한 동작 원리는 다음과 같습니다.평문(PlaneText)의 각 비트를 키의 대응 비트와 XOR 연산 수행키의 대응 비트가 마지막 ..
[이론/C++] 이분 탐색 (Binary Search)
·
IT/알고리즘
이분 탐색(Binary Search)은 코딩 테스트에서 많이 등장하는 알고리즘 중 하나이다.탐색 알고리즘 중 가장 기본적인 알고리즘으로, 특정 값을 빠르게 찾는 로직이다.오늘은 이분 탐색에 대해 정리해보도록 하겠다. 이분 탐색이란? 이분 탐색(Binary Search): 정렬된 배열에서 탐색 범위를 절반씩 줄여나가면서 특정 값을 찾는 알고리즘 이분 탐색 알고리즘의 중요한 포인트는 정렬된 배열이 필요하다는 점이다.왜냐하면 이분 탐색은 데이터가 정렬되었다는 가정 하에 동작하기 때문이다. 그렇다면 이분 탐색의 알고리즘이 어떻게 동작하는지 살펴보도록 하자.   이분 탐색의 원리 이분 탐색을 하기 위해서는 left, right, mid 3개의 위치값이 필요하다.이분 탐색의 알고리즘은 다음과 같이 동작한다. ① 초..
[이론] 그리디(Greedy)
·
IT/알고리즘
그리디 알고리즘은 각 단계에서 그 순간이 최선이라고 생각하며 선택하는 방식이다.겉보기엔 간단하고 직관적이지만 항상 최적의 해를 보장하지는 않는다.이번 포스터에선 그리디 알고리즘의 개념과 특징, 그리고 예시를 통해 알아보도록 하겠다.  그리디 알고리즘이란 무엇인가 그리디(Greedy): 문제를 해결할 때 각 단계에서 가장 최선이라고 생각되는 선택을 함으로써 전체 해를 구하는 방식  그리디를 사용하는 이유 그리디 알고리즘을 사용하면 많은 이점이 있습니다.완전 탐색이 아닌, 최적의 해를 구하는 성질에 의한 경우만 탐색하면 되기 때문입니다.  구현이 간단하고 빠름그리디 알고리즘은 성질에 따라 로직을 구현하면 되기 때문에 다른 알고리즘보다 구현하기 쉽다.  계산 속도가 빠름전체 경우가 아닌, 이미 성질에 의해 정..
[이론] 비트마스크(Bitmask)
·
IT/알고리즘
비트마스크는 주어진 문제를 효율적으로 해결하기 위한 강력한 도구로, 특히 상태를 간단하게 표현하거나 부분 집합을 다룰 때 유용하다. 코딩 테스트에서는 메모리와 연산 시간을 절약할 수 있어 많이 활용되며, 비트 연산의 기본 개념만 이해해도 문제 해결에 큰 도움이 된다. 이번 글에서는 비트마스크의 기본 원리와 활용 예제를 통해 그 응용법을 살펴보겠다.  비트마스크(Bitmask)란? 비트 마스크: 비트 연산을 사용하여 데이터를 효율적으로 처리하는 기법 보통 상태를 표현하거나 조작할 때 유용하며, 특히 메모리를 절약하고 빠른 계산을 필요로 하는 상황에 유용하다. 이진수의 각 비트를 이용하여 여러 상태를 표현한다. 그래서 int형 value 하나로 32개의 Boolean 상태를 표현할 수 있다.이러한 구조를 통..
[이론] DFS & BFS (+ 트리 순회)
·
IT/알고리즘
깊이 우선 탐색(DFS)와 너비 우선 탐색(BFS)은 그래프 탐색에서 자주 사용되는 기본적인 알고리즘이다.DFS는 한 노드의 끝까지 탐색한 후 돌아오는 방식이고, BFS는 가까운 노드부터 차례로 탐색해 나가는 방식이다.오늘은 DFS와 BFS의 동작 원리와 구현 방법, 그리고 각각의 특징과 활용 사례를 알아보도록 하겠다. 깊이 우선 탐색(DFS) DFS: 가능한 깊은 경로를 따라 탐색하다가 더 이상 깊이 갈 수 없을 때 뒤로 돌아가서 다른 경로를 찾는 방식stack 혹은 재귀 함수를 통해 구현할 수 있다.  DFS 응용탐색 경로: 미로 찾기 및 퍼즐 문제 등에서 특정 목표 지점에 도달하는 경로 탐색백트래킹 문제: 조합, 순열 생성 등에서 백트래킹 기법과 함께 활용사이클 탐지: 그래프에서 사이클이 존재하는지..
[이론] 그래프 (Graph)
·
IT/알고리즘
그래프(Graph)는 노드와 간선으로 이루어진 자료구조로, 객체 간의 관계를 표현하며 다양한 응용 분야에서 사용된다. 주로 탐색 알고리즘에는 BFS, DFS가 있고, 최단 경로와 최소 신장 트리 등 다양한 그래프 알고리즘에 활용된다. 오늘은 코딩 테스트에서 자주 등장하는 자료구조인 그래프에 대해 알아보도록 하겠다.  그래프 (Graph) 정의 그래프(Graph): 노드와 간선으로 이루어진 자료구조 그래프는 데이터 구조의 일종으로, 객체 간의 관계를 나타내는 데 사용된다.노드(Node, 또는 Vertex)와 간선(Edge)으로 구성되며, 두 노드 간의 연결을 나타낸다.주로 소셜 네트워크 및 지도 경로 탐색, 웹 페이지 간의 링크 구조, 게임 월드 맵 등에 주로 사용된다. 💡  노드(Node): 그래프에서..
[이론] 완전 탐색과 백트래킹
·
IT/알고리즘
완전 탐색과 백트래킹은 코딩 테스트에서 중요한 탐색 기법으로, 문제에서 가능한 모든 경우의 수를 고려하여 최적의 해답을 찾는 데 사용된다. 오늘은 완전 탐색과 백트래킹이 어떤 개념인지 알아보도록 하겠다. 완전 탐색 (Brute Force)  완전 탐색(Brute Force)은 모든 가능한 경우를 무식하게 하나하나 다 확인하는 방식으로 문제를 해결한다. 가능한 모든 조합, 모든 배열 등을 전부 시도해본 뒤 조건에 맞는 결과를 찾는다.따라서 완전 탐색은 가장 단순한 방법이지만, 시간 복잡도가 클 수 있으니 입력의 크기를 잘 확인해야 한다. 간단한 문제로 확인해보겠다.   백준 2309번: 일곱 난쟁이https://www.acmicpc.net/problem/2309 ✅ 코드 확인더보기#include #incl..
[이론] 순열과 조합
·
IT/알고리즘
순열과 조합은 코딩 테스트에서 자주 등장하는 개념으로, 데이터를 나열하거나 선택하는 문제를 해결하는 데 필수적이다.  이러한 개념을 이해하고 활용하면 효율적인 알고리즘 설계와 문제 해결에 큰 도움이 된다. 오늘은 순열과 조합에 대해 개념과 코드에 대해 알아보도록 하겠다. 순열(permutation) 순열(permutation): 여러 개의 요소를 특정 순서에 따라 배열하는 경우의 수  예를 들어, 3개의 숫자 1, 2, 3을 모두 사용해 순열을 구하는 경우 P(3, 3) = 3! = 6이 되어 6가지 경우의 수가 나온다.- (1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1) 시간 복잡도는 얼마일까?O(n!)이다. n개의 요소가 있다면 첫 번..
코딩 테스트에서 C++이 유리한 이유와 장점
·
IT/알고리즘
최근 개발자들이 취업을 준비할 때 필수 관문이 된 코딩 테스트에서 다양한 언어들이 사용되지만, 그중에서도 많은 개발자들이 C++을 선호하는 경향이 있다. 오늘은 C++이 코딩 테스트에서 유리한 이유과 장점에 대해서 분석해보도록 하겠다. 빠른 실행 속도 C++의 실행 속도는 다른 언어에 비해 상당히 빠른 편이다. 일반적인 알고리즘 문제의 경우, Python보다 약 10 ~ 100배 정도 빠른 실행 속도를 보이며, Java보다 약 1.2 ~ 2배 정도 빠른 것으로 평가된다. 특히 수백만 개의 반복 연산이나 대규모 데이터 구조를 다룰 때 속도 차이가 두드러진다.  C++은 컴파일 시점에 기계어 코드로 변환되므로, 실행 시간에는 기계어 수준에서 곧바로 연산이 이루어진다. 반면 Python과 같은 인터프리터 언어..