oracle desgetkey,Oracle的DES加密(在措施中定义密钥、递交密钥并依据递交的密钥推断是否加密)....

在网上查了许多,做了很小的修改

在措施中定义密钥

CREATE OR REPLACE PACKAGE PG_ENCRYPT_DECRYPT IS IKEY VARCHAR2(8) := 'oracle9i'; FUNCTION GEN_RAW_KEY(IKEY IN VARCHAR2) RETURN RAW; FUNCTION DECRYPT_3KEY_MODE(IVALUE IN RAW, IMODE IN PLS_INTEGER) RETURN VARCHAR2; FUNCTION ENCRYPT_3KEY_MODE(IVALUE IN VARCHAR2, IMODE IN PLS_INTEGER) RETURN RAW;END;/create or replace package body pg_encrypt_decryptis--创立密钥function gen_raw_key(ikey in varchar2) return raw asrawkey raw(720):='';beginfor i in 1..length(ikey) looprawkey:=rawkey||hextoraw(to_char(ascii(substr(ikey,i,1))));end loop;return rawkey;end;--解密函数function decrypt_3key_mode(ivalue in raw,imode in pls_integer) return varchar2 asvdecrypted varchar2(4000);rawkey raw(720):='';beginrawkey:=gen_raw_key(ikey);vdecrypted:=dbms_obfuscation_toolkit.des3decrypt(utl_raw.cast_to_varchar2(ivalue),key_string=>rawkey,which=>imode);return trim(vdecrypted);--当心,肃清剩余的空格end;--加密函数function encrypt_3key_mode(ivalue in varchar2,imode in pls_integer) return rawisvencrypted varchar2(4000);vencryptedraw raw(2048);rawkey raw(720):='';vTmp Varchar2(24):=rpad(ivalue,24,' ');--当心由于对输入有8的倍数的要求,因而不足位者补空格beginrawkey:=gen_raw_key(ikey);vencrypted:=dbms_obfuscation_toolkit.des3encrypt(vTmp,key_string=>rawkey,which=>imode);vencryptedraw:=utl_raw.cast_to_raw(vencrypted);return vencryptedraw;end;end;/罗莱家纺蚕丝被

网上说了在包中定义密钥,并对包加密,然而觉察加密包后仍可看到密钥,不懂得是不是自己没写对,因而绕了个路在过程中定义密钥然后递交到sql来告终对密钥的加密,并且可依据递交的密钥是否为空来定夺是否厉行加密解密。问题:觉察对非DES加密后的字符串举行解密会引发失常,尔后穿越捉拿失常来推断是否为加密后的字符串,万一不是加密后的字符串则归来原值来处理表中包括加密和非加密数据的问题,然而这个捉拿失常的代码找不到了,改天有工夫补上。

递交密钥推断是否加密

CREATE OR REPLACE PACKAGE PG_ENCRYPT_DECRYPT IS FUNCTION GEN_RAW_KEY(IKEY IN VARCHAR2) RETURN RAW; FUNCTION DECRYPT_3KEY_MODE(IVALUE IN VARCHAR2, IMODE IN PLS_INTEGER,IKEY IN VARCHAR2) RETURN STRING; FUNCTION ENCRYPT_3KEY_MODE(IVALUE IN VARCHAR2, IMODE IN PLS_INTEGER,IKEY IN VARCHAR2) RETURN STRING;END;/create or replace package body pg_encrypt_decryptis--创立密钥function gen_raw_key(ikey in varchar2) return RAW asrawkey raw(720):='';beginfor i in 1..length(ikey) looprawkey:=rawkey||hextoraw(to_char(ascii(substr(ikey,i,1))));end loop;return rawkey;end;--解密函数function decrypt_3key_mode(ivalue in VARCHAR2,imode in pls_integer,IKEY IN VARCHAR2) return STRING asvdecrypted varchar2(4000);rawkey raw(720):='';BEGINif IKEY IS NULLTHENreturn ivalue;ELSErawkey:=gen_raw_key(ikey);vdecrypted:=dbms_obfuscation_toolkit.des3decrypt(utl_raw.cast_to_varchar2(ivalue),key_string=>rawkey,which=>imode);return trim(vdecrypted);--当心,肃清剩余www.e452.com的空格END IF;end;--加密函数function encrypt_3key_mode(ivalue IN varchar2,imode in pls_integer,IKEY IN VARCHAR2) return STRINGisvencrypted varchar2(4000);vencryptedraw raw(2048);rawkey raw(720):='';BEGINif IKEY IS NULLTHENreturn ivalue;ELSErawkey:=gen_raw_key(ikey);vencrypted:=dbms_obfuscation_toolkit.des3encrypt(rpad(ivalue,24,' '),key_string=>rawkey,which=>imode);vencryptedraw:=utl_raw.cast_to_raw(vencrypted);return vencryptedraw;END IF;end;end;

在sql中利用

create table users(userid varchar2(50) primary key,password varchar2(64),encrypted varchar2(64));--创立表INSERT INTO users VALUES ('user3','3',PG_ENCRYPT_DECRYPT.ENCRYPT_3KEY_MODE('3',1))--插入数据(用户名,密码,加密后的密码)select userid,password,PG_ENCRYPT_DECRYPT.DECRYPT_3KEY_MODE(encrypted,1) DECRYPTED from users;--解密加密后的数据

二、常见讹谬2#: 未曾克隆(clone)归来的对象

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值