본문 바로가기
  • Where there is a will there is a way.

분류 전체보기124

패스워드 저장 해시함수 단방향 해시 함수보통 프로그래머는 아래의 두 가지 중 한 가지로 사용자의 패스워드를 저장한다.단순 텍스트(plain text)단방향 해시 함수(one-way hash function)의 다이제스트(digest)단방향 해시 함수의 문제점인식 가능성(recognizability)동일한 메시지가 언제나 동일한 다이제스트를 갖는다면, 공격자가 전처리(pre-computing)된 다이제스트를 가능한 한 많이 확보한 다음 이를 탈취한 다이제스트와 비교해 원본 메시지를 찾아내거나 동일한 효과의 메시지를 찾을 수 있다.속도(speed)해시 함수는 암호학에서 널리 사용되지만 원래 패스워드를 저장하기 위해서 설계된 것이 아니라 짧은 시간에 데이터를 검색하기 위해 설계된 것이다. 해시 함수의 빠른 처리 속도로 인해 공격자는.. 2018. 10. 12.
최대공약수 알고리즘 유클리드 호제법 증명 유클리드 호제법의 증명최대공약수를 구하는 문제는 단순 하지만 이해가 안되서 찾아보다가 알게 되었습니다.철벽수학 성재혁 선생님 감사합니다. GCD( A, B ) = GCD ( B , MOD( A,B ) ) 임을 증명하면 된다. A = B*q + r 이라고 쓸 수 있다. 만약 A > B라면 아니면 바꿔주면 됨 // r = MOD(A,B)A 와 B의 최대공약수는A = n*k , B = m*k // ( m, n 은 서로소 ) 라고 가정할 수 있다.그러면 r = A-Bq = nk - mkq 라고 쓸 수 있고r = ( n - mq) k 여기서 r은 A의 공약수 임을 알게 된다.B와 r의 최대공약수가 k가 되면 됨으로B = m*k 에서 m 과 n-mg 가 서로소임을 증명하면 된다.귀류법을 통해 m 과 n-mg가 서로.. 2018. 10. 12.
자바 람다식이란? 자바 람다식이란?자바는 함수적프로그래밍을 위해 자바 8부터 람다식을 지원하면서 기존의 코드 패턴이 많이 달라졌다. 람다식은 anonymous function을 생성하기 위한 식으로 객체지향 언어보다는 함수지향 언어에 가깝다. ( 이 내용은 이것이 자바다 에서 람다부분을 참조해서 작성했습니다. ) 자바에서 람다식을 수용한 이유는 자바 코드가 간결해자고 , 주로 사용하는 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있기 때문이다. 람다식의 형태는 매개 변수를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체를 생성한다. 예를들어 // 익명 구현개체 Runnable runnable = new Runnable() { @Override public void run() { } }; // .. 2018. 10. 6.
gson으로 spring에서 http 객체 파싱하기 gson으로 spring에서 http 객체 파싱하기gson jackson과 gson 모두 java에서 지원하는 json 데이타를 바인딩하는 라이브러리이다. 둘다 오픈소스 프로젝트이고 다양한 제네릭 자바 타입을 지원한다. SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); ActorGson rudyYoungblood = new ActorGson( "nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers") ); Movie movie = new Movie( "tt0472043", "Mel Gibson", Arrays.asList(rudyYoungbl.. 2018. 10. 5.
자바 개발 쓰레드에 대한 정리와 제네릭 사용이유 쓰레드의 개념프로세스는 운영체제에서 할당받은 자체 메모리를 가지고 실행하기 때문에 서로 독립적이다. 하지만 멀티 스레드는 하나의 프로세스 내부에서 생성되기 때문에 하나의 스레드가 예외를 발생시키면 프로세스 자체가 종료될 수 있다, 따라서 멀티 스레드를 사용할 경우 예외 처리의 만전을 가해야 한다. 메인쓰레드모든 자바 애플리케이션은 메인 쓰레드가 main() 매소드를 실행하면서 시작된다. 쓰레드 생성예제@Test public void testBeepTestforThread(){ Runnable beepTask = new BeepTask(); Thread thread = new Thread(beepTask); thread.start(); for(int i =0; i 2018. 9. 29.
steemit java commitor 되기 2 새로운 프로젝트 만들기 steemit java commitor 되기 2 새로운 프로젝트 만들기 기존의 steemj 는 android용으로 개발되었기 때문에 spring boot 에서 사용할때 최적화 되기 위하여 프로젝트를 새로 만든다. 추후에 jitpack에 등록하여 library 형식으로 사용할 것이기 때문에 intelliJ에서 spring initializer 가 아니라 gradle project 의 java project로 만들어 주어서 jar 로 떨궈주는게 좋다. AccounName 만들기 기존의 AccountName 은 jackson으로 되어있었지만 이걸 gson으로 변환시켜주는 작업을 해준다. AccountNameTest public class AccountNameTest { private final String E.. 2018. 9. 28.