예전에, 허승호님이 올려준 글에 sha-1 암호화에 대해 pl-sql문으로 아래처럼 작성한게 있더라고요.
혹시 그럼 blowfish 알고리즘(암/복호화)(구글이나 네이버에 알고리즘 참조)도 sql문이나 pl-sql문으로 가능할까요? (
base64 encoding/decoding 도 포함 : 네이버나 구글참조)
이게되면 c언어로 복잡하게 구현안해도 오라클만을 이용해서 편하게 구축할수 있을거같습니다.
난이도가 상당할것으로 보이지만 불가능한것은 아니라고 봅니다.
구르비의 쿼리신이신 마농님을 포함하여 여러 고수님들 같이 고민해보셔서 구축가능할까요?
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;
/