문제

Oracle 데이터베이스에서 데이터를 인코딩하는 데 문제가 있습니다. 다른 문자열 (마스크)으로 xor 문자열을 원한 다음 Base64로 인코딩합니다.

파이썬에서 이것은 다음과 같습니다.

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()

pl/sql에서 나는 얻었다 :

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보다 선호합니다.

도움이 되었습니까?

해결책

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top