체크여부
$('#checkBoxID').is(":checked");
체크하기
$('#checkBoxID').prop("checked", true );
체크해지
$('#checkBoxID').prop("checked", false );
disable
$('#checkBoxID').prop('disabled', true)
체크여부
$('#checkBoxID').is(":checked");
체크하기
$('#checkBoxID').prop("checked", true );
체크해지
$('#checkBoxID').prop("checked", false );
disable
$('#checkBoxID').prop('disabled', true)
$('#selectID').on('change', function(e){
var value = $('#selectID option:selected').val() * 1;
var text = $('#selectID option:selected').text();
});
보안을 하다보면 많이 접하게 되는 해시 함수(hash function) 또는 해시 알고리즘(hash algorithm)에 대하여 알아보자
해시 함수는 임의의 길이의 데이터를 임의의 고정된 길이의 데이터로 매핑하는 함수이다.
예를 들어 큰 수를 10으로 나눈 나머지를 구하는 함수도 해시 함수라고 할 수 있다.
10001 % 10 = 1
1000000002 % 10 = 2
5 % 10 = 5
1500 % 10 = 0
임의의 큰 수를 입력해도 결과는 항상 1자리수로 나오기 때문이다.
여기서 10으로 나눈 수(해시 함수의 결과)를 해시 값, 해시 코드 등으로 불린다.
조금 더 자세히 설명하기위해 일방향 함수(one-way function)을 먼저 설명하겠다.
일방향 함수 즉 한쪽으로는 쉽고 반때쪽으로 어려운 함수이다.
위에서 예로든 % 가 좋은 예가 된다.
x % 10 = y
x를 알떄 y를 구하는건 쉽다. x = 11 이면 y=1, x = 105 이면 y = 5
y를 알때 x를 구하는건 쉬지 않다. y = 1 이면 x = 1, 11, 111, 1111, 11111 등등 중 하나.
반면 + 1 의 경우는 일방향 함수가 아니다.
x + 1 = y
x를 알때 y를 구하는건 쉽다. x = 1 이면 y = 2
y를 알때 x를 구하는것 또한 쉽다. y = 1 이면 x = 0
해시함수는 이러한 일방향 함수에서 몇가지 특성이 추가된다
위에서 예로든 % 의 경우 x가 1, 11, 111, 1111 모두 % 10 을 하면 1 이 된다.
이를 충돌(collision)이라 한다.
해시함수는 입력이 다르지만 해시 값이 같을 수 있다. 해시 함수는 큰 데이터를 작게 만드는 것이기 때문에 충돌은 피할 수 없다.
다만 이 충돌을 찾기 힘들어야 한다.
%는 충돌을 찾기 쉽기 때문에 좋은 해시 함수는 아니다.
해시함수는 입렵값이 바뀌면 결과값도 크게 바뀌어야 한다.
1비트라도 달라진다면 해시값이 달라져야 하며 같은 값이 될 수도 있지만 불가능한 수준이여야 한다. 해시 입력1과 해시 입력2가 비슷하더라도 해시 결과1 해시 결과2는 많이 달라야 한다.
요약하자면
1. 일방향 함수
2. 충돌을 찾기 어려움
3. 입력이 바뀌면 결과가 크게 바뀜
이러한 특징이 왜 중요한지 잘 이해가 되지 않을수 있다.
하지만 어떻게 사용되고 있는지 본다면 더 잘 이해가 될 것이다.
로그인 비밀번호를 db에 저장할 경우 그냥 저장한다면 db 관리자는 사용자의 비밀번호를 그냥 확인 할 수 있다. 하지만 해시 함수를 이용하여 해시 값을 저장한다면 db 관리자는 해시 값은 알수 있지만 비밀번호는 알 수 없다. (one-way function + 충돌을 찾기 어려움)
데이터와 데이터의 해시 값을 수신 받았을 경우 누군가 데이터를 변조 하였을 때 해시 값을 비교 하여 데이터가 바뀐 사실을 알수있다.( 입력이 바뀌면 결과도 바뀐다. 물론 해시 값도 바꾸면 어쩔 수 없지만 그에 대한 장치는 다른 방법으로 보완한다)
비밀번호를 해시 하여 저장할때 비밀번호1과 비밀번호2가 비슷하더라도 해시 값1과 해시 값2는 많이 다르기 때문에 db 관리자는 비밀번호1과 비밀번호2가 비슷하다고 유추할 수 없다.
암호화(encrypt)와 차이도 잘 알아두었으면 좋겠다.
암호화는 기본적으로 인증된 사람만 볼수 있게 하는것이 목적이다.
그래서 인증된 사람만 암호문을 만들수 있고 인증된 사람만 복호화 할 수 있다.
반면 해시는 누구나 해시 할수 있고 누구도 해시 결과로 해시 전의 데이터를 알수 없다.
암호학적으로 유명한 해시 함수는 MD5, SHA계열의 해시 함수가 있다.
특정 위치로 scroll 하기
document.getElementById('elementID').scrollIntoView();
document.getElementById('elementID').scrollIntoView( alignToTop );
document.getElementById('elementID').scrollIntoView( scrollIntoViewOptions );
alignToTop - boolean
true 일때 element가 젤 위로 오게 scroll 이동
false 일때 element가 젤 아래로 오게 scroll 이동
scrollIntoViewOptions - 이외 옵션
behavior - 전환 에니메이션 정의
"auto", "smooth" 중 선택. (default : "auto")
block - 수직 정렬을 정의
"start", "center", "end", "nearest" 중 선택(default: "start" )
inline - 수평 정렬을 정의
"start", "center", "end", "nearest" 중 선택(default: "nearest" )
element가 가운데로 오게 하고 싶을 경우
document.getElementById('elementID').scrollIntoView( {"block" : "center"} );
netstat를 이용하여 사용중인 포트, 연결된 주소, 연결 상태등을 알수 있다.
netstat /na
특정 포트가 사용중인지 확인도 가능하다
netstat /na | find "443"
관리자 권한이 있을 시 관련 프로세스 정보도 알수 있다
netstat /nab
내용이 많아 보기 힘들때는 파일로 만들어서 확인할 수 있다.
netstat /nab > portinfo.txt
tomcat에서 지원하는 service.bat를 이용하여
Tomcat을 서비스로 등록 / 제거 할 수 있다.
cd $(Tomcat 설치경로)\bin
service.bat install [service name]
service.bat remove [service name]
service.bat uninstall [service name]
$(tomcat 설치경로)\conf\server.xml 파일 수정
다음 내용을 찾아서 포트만 수정
--- http ---
<Connector port="$(변경할 포트)" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
톰캣 재시작
http://localhost:$(변경한 포트)/ 로 접속 확인
혹시 접속이 안될경우 방화벽 인바운드 규칙 확인
--- https ---
<Connector port="$(변경할 포트)" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
톰캣 재시작
https://localhost:$(변경한 포트)/ 로 접속 확인
혹시 접속이 안될경우 방화벽 인바운드 규칙 확인