Oracle加解密 解決編碼問題 解決中文截斷問題

2021-08-11 13:10:53 字數 1698 閱讀 5066

oracle中使用des進行加密,如果oracle編碼utf-8時,會出現編碼錯誤。要進行轉碼。

網上查詢的**都會出現 中文截斷的現象,比如 "加密這個1",會把「1」漏了加密,這是因為使用了length()函式的原因,使用lengthb()則不會出現問題。

優化空位元組處理和解密空白字元處理

編碼方法如下:

create or replace function 

encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is

v_text varchar2(4000);

v_enc varchar2(4000);

raw_input raw(128) ;

key_input raw(128) ;

decrypted_raw raw(2048);

begin

dbms_output.put_line(p_text);

v_text := rpad( p_text, (trunc(lengthb(p_text)/8)+1)*8, chr(0));

dbms_output.put_line(v_text);

raw_input := utl_i18n.string_to_raw(v_text,'zhs16gbk');

key_input := utl_i18n.string_to_raw(p_key,'zhs16gbk');

dbms_obfuscation_toolkit.desencrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw);

v_enc := rawtohex(decrypted_raw);

dbms_output.put_line(v_enc);

return v_enc;

end;

/

對應的解碼方法:

create or replace function wpgl.decrypt_des(p_text varchar2, p_key varchar2) return varchar2 is

p_text_raw raw(2000);

p_key_raw raw(2000);

v_text_raw raw(2000);

v_text varchar2(2000);

begin

if(p_text  is null or p_text = '' )

then return '';

end if;

p_text_raw := hextoraw(p_text);

p_key_raw := utl_i18n.string_to_raw(p_key, 'zhs16gbk');

dbms_obfuscation_toolkit.desdecrypt(input => p_text_raw, key =>p_key_raw, decrypted_data=> v_text_raw);

v_text := utl_i18n.raw_to_char(v_text_raw, 'zhs16gbk');

dbms_output.put_line(v_text);

return rtrim(v_text,chr(0));

end;

/

php url編碼與解碼(加 解密)

將字串以 base64 編碼。語法 string base64 encode string data 返回值 字串 函式種類 編碼處理 內容說明 本 函式將字串以 mime base64 編碼。此編碼方式可以讓中文字或者也能在網路上順利傳輸。在 base64 編碼後的字串只包含英文本母大小寫 阿拉伯...

php base64編碼 加解密 手動實現

base64編碼原理 gb 2312 字符集是目前最常用的漢字編碼標準。在這個標準中,每個漢字用2個位元組來表示,每個位元組的ascii碼為 161 254 16 進製a1 fe 第乙個位元組 對應於 區碼的1 94 區,第二個位元組 對應於位碼的1 94 位。漢字的unicode 編碼範圍為 u4...

T SQL問題解決集錦 資料加解密(2)

truncate在對大表全刪除操作時,會明顯比delete語句更快更有效,但是因為它不需要存放日誌,並且一定是全表刪除,所以造成資料的不可恢復性。也說明了它的危險性。但是,執行truncate需要有表擁有者 系統管理員 db owner db ddladmin這些裡面的其中一種高許可權角色才能執行。...