Oracle Clob加密与解密

原创文章

转载 请注明来源  风潇潇的博客

http://blog.csdn.net/q2wxec/article/details/78906534



工作需要,需要加密clob字段,但网上很多教程都只能用于varchar的加密于是研究了一番,使用oracle官方的加密工具包,写出了,clob加密的存储过程和解密的存储过程

clob加密到blob

--使用加密包需要oracle系统管理员权限,grant execute on dbms_crypto to ****

CREATE OR REPLACE
procedure ENCRYPT_CLOBTOBLOB  --加密CLOB,加密到BLOB
Authid Current_User						--授予存储过程当前用户权限
as
   input_CLOB       CLOB;			--加密输入CLOB选择器
   output_BLOB_EN   BLOB;			--加密输出BLOB选择器
   num_key_bytes    NUMBER := 256/8;        -- key长度
   key_bytes_raw    RAW (32);               -- 存储32长度的raw型的key
   encryption_type    PLS_INTEGER :=        -- 加密算法的相关参数
                            DBMS_CRYPTO.ENCRYPT_AES256
                          + DBMS_CRYPTO.CHAIN_CBC
                          + DBMS_CRYPTO.PAD_PKCS5;
 

BEGIN
     --输入与输出选择器赋值
		SELECT DOC_CONTENT INTO input_CLOB FROM TB_DOC WHERE id='123456';
		 --输出将覆盖选择位置的原始值需要锁表且原始值不能为空
		--lob默认值可使用empty_clob(),empty_blob()
		SELECT ENCRYPT_DOC INTO output_BLOB_EN FROM TB_ENCRYPT_DOC WHERE id='123456'for update;
		 --转换key类型为raw
		key_bytes_raw := UTL_RAW.CAST_TO_RAW ('ufsidf89ew8r9fh378fn837dwf893fgf');
   
   DBMS_CRYPTO.ENCRYPT
      (		
		 dst => output_BLOB_EN,
         src => input_CLOB,
         typ => encryption_type,
         key => key_bytes_raw,
         iv  => NULL   					--使用默认值null
      );
	commit;
END;

解密blob到clob

CREATE OR REPLACE
procedure DECRYPT_BLOBTOCLOB
Authid Current_User
as
   output_CLOB      CLOB;
	 input_BLOB_EN   	BLOB;
   num_key_bytes    NUMBER := 256/8;        -- key length 256 bits (32 bytes)
   key_bytes_raw    RAW (32);               -- stores 256-bit encryption key
   encryption_type    PLS_INTEGER :=          -- total encryption type
                            DBMS_CRYPTO.ENCRYPT_AES256
                          + DBMS_CRYPTO.CHAIN_CBC
                          + DBMS_CRYPTO.PAD_PKCS5;
 --  iv_raw             RAW (16);

BEGIN
		SELECT ENCRYPT_DOC INTO input_BLOB_EN FROM TB_ENCRYPT_DOC WHERE id='123456';
		SELECT ENCRYPT_DOC_CLOB INTO output_CLOB FROM TB_ENCRYPT_DOC WHERE id='123456' for update;
	
	
		key_bytes_raw := UTL_RAW.CAST_TO_RAW ('ufsidf89ew8r9fh378fn837dwf893fgf');
	--	iv_raw        := DBMS_CRYPTO.RANDOMBYTES (16); 
   
   
 DBMS_CRYPTO.DECRYPT
      (
         dst => output_CLOB,
				 src => input_BLOB_EN,
				 typ => encryption_type,
				 key => key_bytes_raw,
         iv  => NULL
      );
   
	commit;
END;




  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值