2012-06-17 2 views
14

가능한 중복 :
Is there any hash function in PL/SQL?오라클에는 해시 함수가 내장되어 있습니까?

나는 오라클 11g의 NCLOB 데이터베이스 유형의 열이 있습니다. 해당 콘텐츠에 대한 해시 값을 가져와야합니다. 오라클의 빌트인 오라클 기능이나 PL/SQL SP를 사용하면 어떻게 할 수 있습니까?

+0

dbms_crypto.hash http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_crypto.htm#ARPLS65700을 참조하십시오. 나는 NCLOB을 취하는 버전을 보지 못했는데, 만약'src IN CLOB CHARACTER SET ANY_CS'가 모든 경우에 손실없이 NCLOB을 취할 수 있었는지 모르겠다. 조사 할 게있어. –

+0

이 질문은 * 정확한 * 중복이 아닙니다. NCLOB 또는 VARCHAR2 해시에는 약간의 차이점이 있습니다. 특히 ORA_HASH를 사용하면 NCLOB 해시가 결정적이지 않을 수 있으므로 다른 질문에 대한 답변 중 하나가 적합하지 않을 수 있습니다. 결정론적인 해싱에 대한 정보는 내 대답을 참조하십시오. http://stackoverflow.com/a/9476696/409172 –

답변

38

예 : 해싱 및 암호화 (관련이 있지만 완전히 동일하지 않음)는 모두 SYS 패키지 DBMS_CRYPTO를 통해 수행됩니다.

간단한 SHA-1 해시

l_hash := dbms_crypto.hash(l_src, dbms_crypto.HASH_SH1); 

간단한 해싱 MD5 해시() 함수의 과부하

dbms_crypto.hash의

l_hash := dbms_crypto.hash(l_src, dbms_crypto.HASH_MD5); 

개요() 다음 유형을 허용하려면 : RAW, BLOB, a CLOB. 원시 허용 입력 유형에 대한 implicity data conversions에 따르면 RAW, CHAR, VARCHAR2, NCHAR, NVARCHAR2, LONG, BLOB입니다. RAW/암시 적 RAW 변환, BLOB 및 CLOB에서 다루지 않는 다른 모든 데이터 유형 (DATE, TIMESTAMP 등)은 먼저 TO_CHAR()을 통해 전달되어야합니다.

그것은 그 dbms_crypto.hash을 (주목할 가치가있다)를 지원하는 다음과 같은 해시 알고리즘 :

  • HASH_MD4
  • HASH_MD5
  • HASH_SH1

암호 : 단지의 경우

암호를 저장하는 경우, 암호 해시 (md5, sha-1 등) 대신 암호 저장소 해시 (bcrypt, PBKDF2 또는 scrypt)를 사용하는 것이 좋습니다. 차이점은 암호 저장 해시는 깨는 데 시간이 걸리는 반면 암호화 해시는 빨리 수행된다는 의미입니다. 무차별 대입을 통해 시스템의 암호 목록을 공격 할 때 암호 알고리즘을 통과하는 소금에 절인 값을 깨려고 할 때 더 많은 시간이 소요됩니다. 단일 값에 대해 암호 해시를 사용하는 경우 ~ 100ms가 걸릴 수 있지만 전체 암호 목록에 대한 무차별 대입 (암호 당 수백만/수십억 개의 시도)은 매우 느립니다.

오라클은 미워 암호 나 암호 해싱 지원을 제공하는 오라클의 모든 패키지를 인식하지 누구인지 그 가치에 대한

을 해시. 그러나 'loadjava'을 사용하고 Oracle의 RDBMS와 함께 실행되는 JVM 내에 Java bcrypt 구현을 배치하여이를 수행 할 수 있습니다. 그런 다음 PL/SQL wrapper을 사용하여 bcrypt를 구현하는 Java 클래스를 호출 할 수 있습니다. 중간 계층을 사용하는 경우 해당 언어 (.NET, PHP, Perl, Ruby, Python, Java 등)로 사용할 수있는 다른 많은 옵션을 사용할 수 있으며 'loadjava'를 사용하지 않아도됩니다.

나는 해시가 아니라 해시를 의미합니다.

  • :

    이 경우 당신이 dbms_crypto.hash()이 적용되지 않습니다 필요 해시, 당신은 다음과 같은 유형에 걸리는 것을 제외하고는 매우 유사하게 작동하는 dbms_crypto.encrypt를 통해 암호화를 찾고 수 있습니다 ENCRYPT_DES

  • ENCRYPT_3DES_2KEY
  • ENCRYPT_3DES
  • ENCRYPT_PBE_MD5DES
  • 을 ENCRYPT_AES ENCRYPT_AES256

ENCRYPT_AES192

  • ENCRYPT_AES128
  • 0은 여기에 전체 11gR2 documentation on DBMS_CRYPTO이다. 다른 모든 버전은 tahiti.oracle.com을 통해 제공됩니다. 버전을 클릭 한 다음 'dbms_crypto'를 검색하십시오.

  • +0

    중복 된 질문에서 허용되는 답변보다 나은 답변이 몇 가지 있습니다. 코드 예제 및 세부 정보와 가이드에 대한 링크. –

    +0

    OTOH, 정말로 가치가 -1 인 경우 일반적으로 암호 저장을 위해 암호화가 아닌 salt + 암호의 암호화 해시를 사용하려고합니다 (암호를 추출 할 수 있어야하지만 무서운 경우는 제외). http : //를 참조하십시오. –

    +0

    @ShannonSeverance 전문가가 아닌 사람에게 기사를 연결하는 것보다 더 이상 논점을 논할 수는 없습니다. 제 사과를 받아주세요. 이 문제에 대한 생각이 있다면 나는 항상 새로운 아이디어를 듣기 시작했습니다. 저는 무염화 된 암호화 알고리즘과 무염화 된 해시 알고리즘이 모두 뒤집을 수 있다는 현재의 가정을 해소합니다. 해시 (Hash)는 길지 않은 누군가를 뒤집을 때까지 한 가지 방법입니다. 그 점을 염두에두고 무엇이 다른지 생각해보십시오. http://krebsonsecurity.com/2012/06/how-companies-can-beef-up-password-security/ –

    관련 문제