MySQL 의 Password 함수의 알고리즘

MySQL에서 사용되는 password 함수는 입력되는 문자열을 Hashing 하여 돌려준다. MySQL 4.x 버전 이전까지는 아마 MD5 알고리즘을 사용하였는데 4.x 이후에는 PASSWORD함수의 알고리즘이 SHA1으로 바뀌고 이전 호환성을 위해 이전 함수는 OLD_PASSWORD()라는 이름으로 제공한다. (위 버전은 정확하지 않음) 알고리즘은 sha1을 두번 사용한다고 한다. 그런데, MySQL 에서 password()를 이용해서 생성해보면 ( https://www.browserling.com/tools/mysql-password  에서 password를 생성가능) sha1(sha1('문자열')) 한 결과와 다르게 나온다. 찾아보니 이유는 sha1의 입력도 문자열, 출력도 문자열 인데 password함수는 sha1의 출력을 바이너리 그대로 sha1의 입력으로 넣는다. 아래 C코드를 보면 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #incldue<stdio.h> #include<openssl/sha.h> typedef unsigned char u8; int main ( int argc, char * argv[]){ u8 ibuf[ 20 ] = "abc" ; u8 obuf[ 20 ] = { 0 ,}; SHA1(ibuf, strlen(ibuf), obuf); SHA1(obuf, 20 , outbuf); for ( int i = 0 ;i < 20 ;i ++ ) printf( "%02x" , outbuf[i]); printf( " \n " ); return 0 ; } 이렇게 하면 MySQL의 password 함수와 동일한 결과를 얻을 수 있다. MySQL에서는 sha1(unhex(sha1('abc'

책: 완벽한 공부법

완벽한 공부법(완공) - 읽는중 생각나는 부분만 적음.(작성중) 1. 성장형 사고방식: 공부가 재능이 아니라 할 수록 잘 할 수 있다는 생각. 실패하거나 잘 못하더라도 연습하면 잘하게 된다는 생각을 당연히 하는것. "역시난 안되", "공부 잘 하는 애들은 타고 난거야" 라는 생각을 안하는것. 2. 잘한것에 대한 초점을 맞추자. 3. 믿음 Think about thinking. 메타인지 해마 작업기억(=단기기억) - 4가지 작업대: 음운회로(phonological loop), 시공간메모장(visual-spatial sketchpad), 일화완충기(episodic buffer), 중앙집행기(central executive)

용적률, 건페율 과 도로

용적률은 어떤 땅에 건물을 지을때 바닥면적의 합과 땅의 비율이다. 바닥면적이란 건물의 각층의 면적이고, 하늘에서 정확하게 수직으로 내려다 보았을때 면적을 말한다. 예를 들어 100평 크기의 땅에 50평에만 건물을 2층을 지으면 바닥면적의 합은 50x2 이므로 100이다. 이때 용적률은 100%가 된다. 건폐율은 100평땅에 50평만 건물이 세워져 있으므로 50%가 된다. 여기까진 쉽게 알 수 있는 사실이고... 용적률을 정하는 큰 기준은 용도지역구분이다. (아래 자료는 작성중임) 용도지역( 국토의 계획 및 이용에 관한 볍률 시행령) 주거지역 구분 건폐율 용적률 전용주거지역 (양호한 주거환경을 보호하기위해) 1종(단독주택) 50% 이하 50~100% 2종(공동주택) 50%이하 100~150% 일반주거지역 (편리한 주거환경을 조성하기 위해) 1종(저층주택) 60% 이하 100~200% 2종(중층주택) 60%이하 150~250% 3종(중고층주택) 50%이하 200~300% 준주거지역 (주거기능을 위주+일부 상업기능 및 업무기능) 70%이하 200~500% 상업지역 구분 건폐율 용적률 중심상업지역 (도심,부도심의 상업/업무 기능 확충) 90% 이하 400%~1500% 일반상업지역(일반적인 상업/업무기능담당) 80% 이하 300%~1300% 근린상업지역(근린지역에서 일용품/서비스 공급) 70%이하 200%~900% 유통상업지역(도시내-지역간 유통기능 증진) 80%이하 200%~1100% 공업지역   - 전용공업지역(주로 중화학공업, 공해성 고업 등을 수용하기 위해) 70% 150~300%   - 일반공업지역 : 호나경을 저해하지 아니하는 공업의 배치 70% 200~350%   - 준공업지역 : 경공업 그 밖의 공업, 주거+상업+업무기능 보완 70% 200~400% 녹지지역   - 보전녹지지역 : 도시의 자연환경/경관/사림 및 녹지공간 보전 20% 50~80  

Python map() , zip()

Python 의 map() 과 zip() - map( ) :  https://docs.python.org/ko/3.7/library/functions.html#map map ( function ,  iterable ,  ... ) iterable  의 모든 항목에  function  을 적용한 후 그 결과를 돌려주는 이터레이터를 돌려줍니다. 추가  iterable  인자가 전달되면,  function  은 그 수 만큼의 인자를 받아들여야 하고 모든 이터러블에서 병렬로 제공되는 항목들에 적용됩니다. 다중 이터러블의 경우, 이터레이터는 가장 짧은 이터러블이 모두 소모되면 멈춥니다. 함수 입력이 이미 인자 튜플로 배치된 경우에는,  itertools.starmap()  를 보세요. - zip() :  https://docs.python.org/ko/3.7/library/functions.html#zip zip ( *iterables ) 각 iterables 의 요소들을 모으는 이터레이터를 만듭니다. 튜플의 이터레이터를 돌려주는데,  i  번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의  i  번째 요소를 포함합니다. 이터레이터는 가장 짧은 입력 이터러블이 모두 소모되면 멈춥니다. 하나의 이터러블 인자를 사용하면, 1-튜플의 이터레이터를 돌려줍니다. 인자가 없으면, 빈 이터레이터를 돌려줍니다. map(str , [1,2,3]) 의 결과는 ['1','2','3'] 1,2,3 이라는 숫자가 각각 str함수를 거쳐서 문자열 1,2,3 으로 바뀐다.  만약 x2 라는 함수를 아래와 같이 정의하면 def x2(x):     return x*2 map(x2, [1,2,3]) 의 결과는  [2,4,6] map의 인자가 iterable 하기만 하면 됨. zip은 ['a','b','c'] 와 [1,2,3] 이라

토마스 기찻길

이미지

토마스 기찻길

이미지