ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle-数据加密,导出脱敏函数

2020-03-04 22:58:25  阅读:517  来源: 互联网

标签:加密 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有