2009-06-01 8 views
1

Oracle 데이터베이스의 인코딩 데이터에 문제가 있습니다. 다른 문자열 (마스크)을 사용하여 문자열을 xor 또는 base64로 인코딩하려고합니다. 내가 가진 PL/SQL에서Oracle에서 문자열을 인코딩하는 방법은 무엇입니까?

def encode_str(s, mask): 
    xor_mask = mask 
    while len(xor_mask) < len(s): 
     xor_mask += mask 
    chrs2 = [] 
    for i in range(len(s)): 
     chrs2.append(chr(ord(s[i])^ord(xor_mask[i]))) 
    s2 = ''.join(chrs2) 
    return base64.b64encode(s2) 
    #return binascii.hexlify(s2).lower() 

:

create or replace function ht_encode(str in varchar2, mask in varchar2) return varchar2 as 
    xor_mask varchar2(2000); 
    result_s varchar2(2000); 
    i integer; 
    xx integer; 
    x char(10); 
    ch1 char(10); 
    ch2 char(10); 
    chrx varchar2(10); 
begin 
    result_s := ''; 
    xor_mask := mask; 
    while length(xor_mask) < length(str) loop 
    xor_mask := xor_mask || mask; 
    end loop; 
    for i in 1..length(str) loop 
    ch1 := substr(str, i, 1); 
    ch2 := substr(xor_mask, i, 1); 
    xx := BITXOR(ascii(ch1), ascii(ch2)); 
    x := xx; 
    chrx := rawtohex(x); 
    --result_s := result_s || ':' || chrx; 
    --result_s := result_s || chrx; 
    -- HELP ME HERE! 
    end loop; 
    --return lower(utl_encode.base64_encode(result_s)); 
    --return result_s || ' | ' || rawtohex(result_s); 
    -- HELP ME HERE! 
    return result_s; 
end; 

을 (bitxor http://forums.oracle.com/forums/thread.jspa?threadID=496773에서 온다) 내가 "만드는 방법을 모른다

처럼 파이썬에서이 보인다 이진 "문자열을 입력 한 다음 16 진수로 인코딩하거나 에서 base64로 인코딩하는 것이 좋습니다.

답변

2
SELECT UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(UTL_RAW.bit_xor(UTL_RAW.cast_to_raw('text'), UTL_RAW.cast_to_raw('mask')))) 
FROM dual 
+0

감사합니다. –

관련 문제