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這些裡面的其中一種高許可權角色才能執行。...