sha1 암호화 변환에 대해 질문 0 2 5,856

by 허승호 [Oracle 기초] 암호화 sha1 [2013.05.06 13:30:37]


닷넷에서 SHA1 암호화 알고리즘을 이용하여 값을 집어넣으면 아래 처럼 결과가 나오는데요

오라클에서는 다르게 결과가 나오는데요 아시는 분 있으면 도움 부탁드립니다.

//SHA1 암호화
byte[] datatoHash = Encoding.Default.GetBytes("12345678");   
byte[] hashval = (new SHA1CryptoServiceProvider()).ComputeHash(datatoHash);
Response.Write(Server.UrlEncode(Convert.ToBase64String(hashval)).Replace("%",""));

닷넷에서의 SHA1 결과 => fCIvspJ9goryL1khNOiTJIBjfA03d

테스트SQL
<pre class="brush:sql;">
SELECT RAWTOHEX(DBMS_CRYPTO.HASH(TO_CLOB(TO_CHAR('12345678)),3)) FROM DUAL
</pre>
SQL에서의 SHA1 결과 => 7C222FB2927D828AF22F592134E8932480637C0D

서로가 상이하네요. ㅜㅜ 어떻게 하면 닷넷 처럼결과를 SQL에서 똑같이 구현할수 있을까요?
by 아발란체 [2013.05.06 14:12:22]
VB나 Java로 SHA1 구현해서 돌리니 "7C222FB2927D828AF22F592134E8932480637C0D" 나옵니다.
닷넷쪽 sha1 알고리즘 검색해서 비교해보셔야 할 것 같습니다.

MSDN .NET
http://msdn.microsoft.com/ko-kr/library/system.security.cryptography.sha1.aspx?cs-save-lang=1&cs-lang=fsharp#code-snippet-1

해당 링크에 언어별, .Net 버전별 샘플이 있습니다.

by 허승호 [2013.05.07 08:48:07]
해결했습니다~ 숫자와 특수문자만 되는 형식이더군요.  ㅎㅎ
 
CREATE OR REPLACE FUNCTION GET_SHA1 (INPUT VARCHAR2 default NULL) RETURN VARCHAR2 IS
l_string VARCHAR2(100);
l_sig_mac RAW(2000);
l_base64_sig_mac VARCHAR2(2000);

BEGIN

 IF INPUT IS NULL THEN
 	 RETURN INPUT;
 END IF;

 l_string := UTL_URL.ESCAPE(INPUT);

 l_sig_mac :=DBMS_CRYPTO.Hash(UTL_I18N.STRING_TO_RAW(l_string, 'AL32UTF8'), 3);
 
 l_base64_sig_mac := UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(l_sig_mac));
 
-- DBMS_OUTPUT.put_line('MAC Signature (Base64-encoded): ' || l_base64_sig_mac_alter);
 
 IF LENGTHB(l_base64_sig_mac) > 0 THEN
 
 	 l_base64_sig_mac := SUBSTR(l_base64_sig_mac ,1 ,LENGTHB(l_base64_sig_mac)-1 ) || '3d';
	 
	 l_base64_sig_mac := REPLACE(l_base64_sig_mac , ' ' ,'20');
	 l_base64_sig_mac := REPLACE(l_base64_sig_mac , '/' ,'2F');
	 l_base64_sig_mac := REPLACE(l_base64_sig_mac , '+' ,'2B');	 	 
	 
 END IF;
 

 RETURN l_base64_sig_mac;
 EXCEPTION
  WHEN NO_DATA_FOUND THEN
  NULL;
  WHEN OTHERS THEN
  -- Consider logging the error and then re-raise
  RAISE;
END GET_SHA1;
/



 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입