본문 바로가기

전체 글376

[BaekJoon] 백준 알고리즘 1759번 / 암호 만들기 / 백트래킹(DFS) / Python import sys sys.stdin = open( "input.txt", "r") l, c = map(int, input().split()) bet = list(map(str, input().split())) bet.sort() #알파벳 오름차순 정렬 vowels = ['a', 'e', 'i', 'o', 'u'] ans = [] def check(ans): mo = 0 #모음 개수 ja = 0 #자음 개수 for i in range(l): #개수 계산 if ans[i] in vowels: mo += 1 else: ja += 1 if mo >= 1 and ja >= 2: #자음모음 개수 충족 return True else: return False def func(j): if len(ans) is l: i.. 2023. 3. 7.
[암호기술] 인증 시스템이 포함된 SSL 통신 및 인증서 검증원리 기본용어 CA (Certificate Authority) 디지털 인증서를 제공하는 공인된 기업 (Certificate Authority 혹은 Root Certificate) 대표적인 CA 서비스 제공 기업과 시장점유율 Symantec (VeriSign, Thawte, Geotrust) with 42.9% market share Comodo with 26% GoDaddy with 14% GlobalSign with 7.7% RA (Registration Authority) 신원확인, 고객데이터 유지 등 인증기관의 입증을 대행하는 등록기관 사용자의 인증서 발급 요청을 등로하고, 신원확인 기능을 수행 SSL 인증서의 서비스 보증방법 웹브라우저가 서버에 접속하면 서버는 제일 먼저 인증서를 제공한다. 브라우저는 .. 2023. 3. 7.
[암호기술] 대칭키의 작동원리 / 비대칭키의 작동원리 대칭키의 원문, 암호문, 키, 복호화, 대칭키 원문(평문)을 암호문으로 만드는 것을 암호화 라고 한다. 암호문을 만드는 정보를 키(Key) 라고 한다. 암호문을 해당 키를 이용해서 원문으로 만드는 것을 복호화 라고 한다. 암호화와 복호화에 사용하는 키가 같다면 이를 대칭키라고 부른다. 대칭키의 암호화 원리 암호화키와 원문을 바이너리 형태로 변형한 후 배타적 논리합(XOR) 연산에 따라 암호화 & 복호화 를 하게된다. 위와 같은 원리로 암호화 키의 길이, 키의 사용횟수등의 제약이 없다면 복잡도를 무한히 증가시켜 거의 완벽한 암호화를 할 수 있으나 복호화 하는데 비용(시간소모)이 계속 커진다면 사용할 수가 없을 것이기 때문에 일정한 규격에 의한 암호화를 고려해야 한다. 이러한 암호화방식은 양자연산이 가능한 .. 2023. 3. 7.
[암호기술] Hash를 알아야 블록체인이 보인다 Hash? 단방향 함수이고, 입력과 상관없이 길이가 일정하게 변경한다. 대표적인 알고리즘으로는 MD-5와 SHA-1이 있다.(여기서 단방향 암호화 기법은 암호화는 수행하지만 복호화는 불가능한 알고리즘을 말한다.) 아래는 단방향 해시함수인 MD-5을 통해 해시를 생성할 수 있는 사이트이다. https://www.md5hashgenerator.com/ MD5 Hash Generator A tool for creating an MD5 hash from a string. Use this fast, free tool to create an MD5 hash from a string. www.md5hashgenerator.com 블록체인? 위 사진을 보자. 블록 #0번을 하나의 덩어리로 묶으면 Hash값이 결과가 도.. 2023. 3. 7.
[BaekJoon] 백준 알고리즘 14889번 / 스타트와 링크 / 백트래킹(DFS) / Python import sys sys.stdin = open( "input.txt", "r") def dfs(depth, idx): global minValue team1, team2 = 0, 0 if (depth == N//2): for i in range(N): for j in range(N): if chk[i] == True and chk[j] == True: team1 += graph[i][j] elif not chk[i] and not chk[j]: team2 += graph[i][j] minValue = min( minValue, abs( team1 - team2 ) ) return for i in range(idx, N): if not ( chk[i] == True ): chk[i] = True dfs.. 2023. 3. 7.
[Spring] @SessionAttribute / null 업데이트 방지 / 세션에 저장해서 사용하기 @SessionAttribute는 수정 작업을 처리할 때, 유용하게 사용할 수 있는 어노테이션이다. 예를들어, 상세 화면에서 게시글을 수정한다고 가정해보자. 사용자가 수정한 제목과 내용 정보 등을 가지고 "/update"와 같은 요청을 한다. 이때 사용자가 입력한 정보 외에 작성자 정보는 전달되지 않는다. 즉, Command 객체인 BoardTO에 writer 정보가 저장되지 않는다. 개발자에 따라 다르겠지만, 만약 작성자 컬럼까지 수정되도록 돼있다면 작성자(writer) 파라미터 정보가 전달되지 않으므로 null로 수정될 것이다. update board set title = ?, writer = ?, content = ? where seq = ? 이런 문제를 해결하기 위해서 사용된다. @Controll.. 2023. 3. 6.
[Spring] @ModelAttribute / 두가지 컬렉션을 View로 보내기 / @RequestMapping 어노테이션보다 먼저 실행되는 메서드 만들기 두가지 기능을 가진 @ModelAttribute @ModelAttribute를 Controller 메서드의 매개변수로 선언된 Command 객체의 이름을 변경할 때 사용할 수 있다고 배웠다. 추가로, View(JSP)에서 사용할 데이터를 설정하는 용도로도 사용할 수 있다. @ModelAttribute가 설정된 메서드는 @RequestMapping 어노테이션이 적용된 메서드보다 먼저 호출된다. 그리고 @ModelAttribute 메서드 실행 결과로 리턴된 객체는 자동으로 Model에 저장된다. 따라서 리턴된 객체를 View 페이지에서 사용할 수 있다. 두개의 컬렉션을 리턴 예를 들면, 다양한 검색 조건이 저장된 Map을 리턴해준다고 하자. 아래 코드와 같이 총 2개의 컬렉션을 사용할 수 있다. @Model.. 2023. 3. 6.
[Spring] @RequestParam / Command 객체 사용시 DTO(Data Transfer Object) 클래스에 명시되지 않은 변수를 포함하고 싶은 상황 / DTO에 없는 멤버 변수의 파라미터 정보 Command 클래스에 없는 파라미터 Command 객체를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다. 하지만 이를 위해서는 반드시 요청 파라미터와 맵핑될 멤버변수와 Setter 메서드가 Command 클래스에 선언되어 있어야 한다. 그런데 Command 객체에는 없는 파라미터를 Command 클래스에서 사용하려면? Spring MVC에서는 HTTP 요청 파라미터 정보를 추출하기 위해서 어노테이션을 통해 기능을 제공한다. 물론, 어노테이션을 사용하기 싫다면 멤버변수에 추가, Setter/Getter 메서드를 추가해서 사용하면 된다. 사용자가 글 목록 화면에서 검색 조건과 검색 키워드를 입력하고 검색 버튼을 클릭하면 "/getBoardList.do"와 매핑된 getBoardList.. 2023. 3. 6.
[Spring] request.getParameter() 대체 / Spring의 Command 객체 /Controller에서 사용자 입력 정보를 getParmeter() 메서드가 아닌 Command 객체를 이용해서 구현 request.getParameter() 대부분의 Controller는 사용자의 입력 정보를 추출하여 VO(Value Object)나 DTO(Data Transfer Object) 객체에 저장한다. 그리고 비즈니스 컴포넌트의 메서드를 호출할때 이를 인자로 전달한다. 아래 코드를 보자. 사용자 입력 정보는 HttpServletRequest의 getParameter() 메서드를 사용하여 추출한다. 별다른 문제는 없으나, 사용자가 입력하는 정보가 많거나 변경되는 상황이 발생할 뿐더러 메서드가 굉장히 길어진다.. 이는 Command 객체를 이용하면 해결할 수 있다. @Controller public class InsertBoardController { @RequestMapping(value="/insertBoa.. 2023. 3. 6.