oracle加密-des 简单举例.


Declare
  v_seed Raw(128);
  v_key_1 Raw(64);
  v_key_2 Raw(64);
 
  v_Text_for_encrypted Raw(64);
  v_mw  Raw(64);
  v_cleartext Raw(64);
Begin
   --128位种子,产生密匙
   v_seed:=utl_raw.cast_to_raw('goognightgooddayadkajdfkladjfa;kf;akjdfakd;fadfadfaoeifakdjfakdjfafdafadfaf34343434343434343434343434343434343434343434343434343');  
   dbms_obfuscation_toolkit.DESGetKey(seed => v_seed,key => v_key_1);
   dbms_output.put_line(utl_raw.cast_to_varchar2(v_key_1));
  
   --用密匙加密明文
   v_text_for_encrypted:=utl_raw.cast_to_raw('China is a great country');
   dbms_obfuscation_toolkit.DESEncrypt(input =>v_text_for_encrypted ,key => v_key_1,encrypted_data =>v_mw );
   dbms_output.put_line(v_mw);
  
   --用密匙 解密 密文
   dbms_obfuscation_toolkit.DESDecrypt(input =>v_mw ,key =>v_key_1 ,decrypted_data =>v_cleartext );
   dbms_output.put_line(utl_raw.cast_to_varchar2(v_cleartext));
  
   ---des-3算法测试
   dbms_obfuscation_toolkit.DES3GetKey(which => 0,seed => v_seed,key => v_key_1);
   dbms_output.put_line(utl_raw.cast_to_varchar2(v_key_1));
  
   dbms_obfuscation_toolkit.DES3Encrypt(input =>v_text_for_encrypted ,key =>v_key_1 ,encrypted_data =>v_mw ,which => 0,iv =>Null);
  
   dbms_obfuscation_toolkit.DES3Decrypt(input => v_mw,key =>v_key_1,decrypted_data =>v_cleartext,which => 0,iv => Null);
   dbms_output.put_line(utl_raw.cast_to_varchar2(v_cleartext));
  
   
End;  

输出如下:
   7埓K束觿
8332BE58695F720C4563BAD4CDAACAF687F9A3461B779D7C
China is a great country
x埮>豌h@?镵A.7
China is a great country

 关于des3算法,请参考oracle <<PL/SQL Packages and Types Reference>>


2009/10/23 补充如下:
1)如果在其它的应用环境中调用以上过程方法,那么请务必注意变量处理的问题,否则可能导致无法正确地解密
2)对于不同的oracle实例,其密匙都需要重新生成的。

有两个函数:
 create or replace function func_des3_JiaMi(ClearText  in varchar2) return Varchar2 Is
/*-----------------------------------------------------------------------
  名称:    
  功能简述:对传入的密码进行加密
  参数:
       Ename   Cname   availableValue     
       pwdd    密码
  返回:
       明文密码
  算法:
       DES-3
  注意事项:
       1)对于明文,必须是8的倍数,由于这里是加密密码的,所以,暂时算有24位。
       2)对于key而言,不同的时间产生的不一样的,不同机器产生的也不能混用,所以可以使用其它方法生成一个
         key之后,再代入到以下代码中。
  数据源:
       
  修改记录;
  lzf     2009-10-20     新增
*/  
  --v_seed Raw(128);
  v_key_1 Raw(64);
  vTmp   Varchar2(24):=rpad(ClearText,24,' ');
  --vTmp   Varchar2(24):=ClearText;
  v_cleartext Raw(64);
  v_mw  Raw(64);
Begin
   --128位种子
 --v_seed:=utl_raw.cast_to_raw('riceWaterMeatMilkOrangeAppleBananaVegetableChickenDeskPaperInkCupTeaOilGasKnifeGunSexAgeNiceGirlBeautifulCarBusFatherGoodChinese');      
   --des-3 ,产生密匙
   --dbms_obfuscation_toolkit.DES3GetKey(which => 0,seed => v_seed,key => v_key_1);      
   --des-3-加密      
   v_key_1:=utl_raw.cast_to_raw('$?ⅣU7覡q詹m?.');
   v_cleartext:=utl_raw.cast_to_raw(vTmp);
   dbms_obfuscation_toolkit.DES3Encrypt(input =>v_cleartext ,key =>v_key_1 ,encrypted_data =>v_mw ,which => 0,iv =>Null);
   Return  utl_raw.cast_to_varchar2(v_mw);
   --Return v_mw;
exception
  when others Then
     dbms_output.put_line(Sqlerrm);
     return null;  
end func_des3_JiaMi;
 create or replace function func_des3_JieMi(pwd  in Varchar2) return varchar2 Is
/*-----------------------------------------------------------------------
  名称:    function func_des3_JieMi
  功能简述:对传入的密码进行解密
  参数:
       Ename   Cname   availableValue     
       pwdd    密码
  返回:
       明文密码
  算法:
       DES-3
  注意事项:
     pwd必须是varchar2格式,不是raw格式.  
  数据源:
       
  修改记录;
  lzf     2009-10-20     新增
*/  
  --v_seed Raw(128);
  v_key_1 Raw(64);
  v_cleartext Raw(64);
  v_mw   Raw(64):=utl_raw.cast_to_raw(pwd);
  --v_mw   Raw(64):=pwd;
Begin

   --128位种子
   --v_seed:=utl_raw.cast_to_raw('riceWaterMeatMilkOrangeAppleBananaVegetableChickenDeskPaperInkCupTeaOilGasKnifeGunSexAgeNiceGirlBeautifulCarBusFatherGoodChinese');    
   ---des-3 ,产生密匙
   --dbms_obfuscation_toolkit.DES3GetKey(which => 0,seed => v_seed,key => v_key_1);      
   --des-3-解密   
   v_key_1:=utl_raw.cast_to_raw('$?ⅣU7覡q詹m?.');
   dbms_obfuscation_toolkit.DES3Decrypt(input => v_mw,key =>v_key_1,decrypted_data =>v_cleartext,which => 0,iv => Null);  
   Return  utl_raw.cast_to_varchar2(v_cleartext);
exception
  when others then
     return null;  
end function func_des3_JieMi;
/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值