MS-SQL의 SHA2_512 암호화를 PHP + MariaDB 10.x 에서는 안되려나요?

MS-SQL의 SHA2_512 암호화를 PHP + MariaDB 10.x 에서는 안되려나요?

QA

MS-SQL의 SHA2_512 암호화를 PHP + MariaDB 10.x 에서는 안되려나요?

답변 5

본문

Windows2012 + MS-SQL 2012로 운영중인 홈페이지가 있습니다.
비밀번호 암호화가  HASHBYTES('SHA2_512', @Password) 의 형태로 되어 있네요.


비밀번호가  123456 인경우에
생성된 암호는 0x53D2466F8CBF101A68450C4B0DAE2B2319612C69B6C16B953E5A75DF72B32F0282C4E67AC1D306E1007D0C3F17695D21F6BB7AEBAA264F73B1DBBFB7C544A978
총130자로 생성됩니다.

 

홈페이지 리뉴얼을 하면서 CentOS7 + MariaDB10 으로 변경을 진행중입니다.
SHA2 512 를 구글에서 마구 검색해봤는데,
SHS2_512 는 MS-SQL 2005 / 2008 / 2012 에서 지원하는 암호화 방식이더군요
PHP + MySQL 5.5 에는 SHA512 암호화 형태가 있더군요


MySQL 5.5 이상 그리고 MariaDB 10.x 에서

select SHA2('123456'. 512);  이렇게 하니까 암호가 생성이되는데
ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413
총 128자

 

휴...  위와 같이 MS-SQL 의 SHA2 512 와 같은 암호화는 PHP + MySQL 또는 MariaDB 10.x 에서는 불가능한 걸까요?

이 질문에 댓글 쓰기 :

답변 5

음.. 아까 잠깐 생각해봤는데 플랫폼 아키텍처 문제일까요. (32bit, 64bit) 

이를테면 2012운영중인 곳의 플랫폼들 아키텍트와,

지금 이전하는곳의 아키텍트의 차이로, binary(64)로 생성이 안되어서

다르게 생성될 수 있지 않을까해서요.

Hash 를 다들 조금씩 다르게 암호화를 하는듯 합니다.
그들만의 리그인거죠...  덴장 덴장 ...
MSSQL 은 HashByte = 130byte
Oracle 은 HashThis = ?
PHP , MariaDB 5.5 , MySQL 5.5.5 는 Hash = 128byte

혹시나 해서 스택오버플로우를 봤는데 두가지 찾은것 중에서 이게 더 비슷한것 같아 드립니다.

(답변쪽에 왜 그렇게 되었는지와 어떻게 해야할지를 설명하는것 같은데 대충만 읽어보고 코드자체를 보니 납득은 되는 흐름이라 그냥 드립니다) ㅋㅋㅋ

https://stackoverflow.com/questions/28275703/mssql-where-md5tablefield-md5value

 

엇 그런데 논점은 그게 아니였군요. 좀더 찾아볼게요.

암호화 결과값이 달라요 ... SHA2() 라는 명제는 동일한데 말입니다.
Microsoft 에서 구현하는 방식과 PHP / MariaDB 에서의 결과값이
MySQL 은 5.5.5 이상 설치된 계정이 없어서 테스트를 못해봤지만
PHP / MariaDB와 동일한 값일꺼라 예상됩니다.

현재까지 정리한 내용입니다. http://www.happyjung.com/lecture/2601

마리아DB 5.5 이상은 이게 가능한거 아닌가요?

 

https://mariadb.com/kb/en/library/sha2/

 

Given a string str, calculates an SHA-2 checksum, which is considered more cryptographically secure than its SHA-1equivalent. The SHA-2 family includes SHA-224, SHA-256, SHA-384, and SHA-512, and the hash_len must correspond to one of these, i.e. 224, 256, 384 or 512. 0 is equivalent to 256.

음.. MSDN에도 그에 대한 명시가 없어서 확인이 어렵겠는걸요?
구조적으로 뭐가 다른지 확인하려면, row level 까지 열어봐야할것 같은데... (MSSQL은.. 엔진에 접근할 수 없고....)

찾아보니  HASHBYTES  라는 암호화 방식이 문제인듯합니다.
이것이 MSSQL 전용인듯 싶은데 ... 어휴
http://t2t2tt.tistory.com/14
http://mgdjaxo.blogspot.kr/2015/04/mssql-hashbytes.html

이것에 관련해서 찾아봐야겠네요.

뒤늦게 암호화에 대해서 조금 관심이 생겨서 찾아보다 나온 글이라 댓글을 달아봅니다. 

디비에서 생성된 암호는 디비벤더마다 달라도, php 에서 생성된 암호의 해쉬값을 디비에 넣는 것은 동일하지 않을른지 모르겠습니다. 제가 맥을 잘못짚었다면 죄송합니다. 

해쉬값을 프로그래밍코드에서 만들지, 디비에서 만들지가 관건이지 않을른지 해서... 

SQL 마다 암호화의 규칙이 다르게 만들더군요
프로그램단에서 암호화하는 경우는 호환 코드를 제작하는 것이 좀더 원활하지만
SQL 단에서의 암호화는 그것이 패턴을 공개하지 않기때문에
다른 SQL 또는 프로그램에서 동일한 결과를 도출시키기가 ...

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 2,662
© SIRSOFT
현재 페이지 제일 처음으로