标签:加密 TEXT RAW VARCHAR2 KEY INPUT Oracle RETURN 脱敏
数据加密,脱敏时需要用到自定义函数来完成。
一、使用函数将数据值进行转换后,新建表存储。
/*加密函数*/ CREATE OR REPLACE FUNCTION DS_FUNC_ENCRYPT_DES(P_TEXT VARCHAR2, P_KEY VARCHAR2) RETURN VARCHAR2 IS V_TEXT VARCHAR2(4000); V_ENC VARCHAR2(4000); RAW_INPUT RAW(20000); KEY_INPUT RAW(1000); DECRYPTED_RAW RAW(20000); V_ERRORTEXT VARCHAR2(500); BEGIN DBMS_OUTPUT.ENABLE(BUFFER_SIZE => NULL); IF (P_TEXT IS NULL OR P_TEXT = '') THEN RETURN ''; END IF; 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; EXCEPTION WHEN OTHERS THEN V_ERRORTEXT := 'dserror:' || SUBSTR(SQLERRM, 1, 200); RETURN V_ERRORTEXT; END;
SELECT DS_FUNC_ENCRYPT_DES('字段名','加密字符') FROM TABLE_NAME;
二、使用导出命令将数据导出后解密转储。
/*解密函数*/ CREATE OR REPLACE FUNCTION DS_FUNC_DECRYPT_DES(P_TEXT VARCHAR2, P_KEY VARCHAR2) RETURN VARCHAR2 IS P_TEXT_RAW RAW(20000); P_KEY_RAW RAW(20000); V_TEXT_RAW RAW(20000); V_TEXT VARCHAR2(4000); V_ERRORTEXT VARCHAR2(500); BEGIN DBMS_OUTPUT.ENABLE(BUFFER_SIZE => NULL); 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)); EXCEPTION WHEN OTHERS THEN V_ERRORTEXT := 'dserror:' || SUBSTR(SQLERRM, 1, 200); RETURN V_ERRORTEXT; END;
SELECT DS_FUNC_DECRYPT_DES('字段名','加密字符') FROM TABLE_NAME;
标签:加密,TEXT,RAW,VARCHAR2,KEY,INPUT,Oracle,RETURN,脱敏 来源: https://www.cnblogs.com/yangjn/p/12416757.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。