oracle数据加密

上传人:子 文档编号:43307391 上传时间:2018-06-05 格式:DOC 页数:7 大小:16.15KB
返回 下载 相关 举报
oracle数据加密_第1页
第1页 / 共7页
oracle数据加密_第2页
第2页 / 共7页
oracle数据加密_第3页
第3页 / 共7页
oracle数据加密_第4页
第4页 / 共7页
oracle数据加密_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《oracle数据加密》由会员分享,可在线阅读,更多相关《oracle数据加密(7页珍藏版)》请在金锄头文库上搜索。

1、oracleoracle 数据加密数据加密关于数据加密的知识加密算法的分类:主要有基于“消息摘要”算法, “对称/非对称密钥”加密算法1.基于“消息摘要”算法“消息摘要” (Message Digest)是一种能产生特殊输出格式的算法,这种加密算法的特点是无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是“摘要” ,被“摘要”的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此基于这种原理的算法便能对数据完整性提供较为健全的保障。但是,由于输出的密文是提取原数据经过处理的定长

2、值,所以它已经不能还原为原数据,即消息摘要算法是“不可逆”的,理论上无法通过反向运算取得原数据内容,因此它通常只能被用来做数据完整性验证,而不能作为原数据内容的加密方案使用,否则谁也无法还原。尽管如此, “消息摘要”算法还是为密码学提供了健全的防御体系,因为连专家也无法根据拦截到的密文还原出原来的密码内容。因为这个特性, “消息摘要”算法产生的密文被称为“摘要” 。如今常用的“消息摘要”算法经历了多年验证发展而保留下来的强者,分别是 MD2、MD4、MD5、SHA、SHA-1/256/383/512 等,其中最广泛应用的是基于 MD4 发展而来的 MD5 算法。注:在 oracle 的加密包

3、dbms_obfuscation_toolkit 提供了 MD5 算法的调用过程。就象上面说明的那样,MD5 这种基于消息摘要的加密算法只是单向的,是不可逆的,只能作为一种数据完整性的严整方法。另外一点,一般来说这类算法都是不需要密钥的。例子如下:declare n_in varchar2(100);n_out varchar2(100);beginn_in := sasdadass ssssssssssd;dbms_obfuscation_toolkit.MD5(INPUT_STRING = n_in,CHECKSUM_STRING = n_out);dbms_output.put_line

4、(n_out=|Utl_Raw.Cast_To_Raw(n_out)|长度=|length(Utl_Raw.Cast_To_Raw(n_out);end;MD5 并不是加密算法,而是摘要算法。加密算法是可逆的,摘要算法是理论上不可逆的。你输入任意长度的明文给他,结果都是一个定长 16 、32、64,是 16 的备注,常见于注册码之类的。2.“对称/非对称密钥”加密算法由于“消息摘要”算法产生的数据只能作为一种身份验证的凭证来使用,如果我们要对整个文档数据进行加密,就不能采用这种“不可逆”的算法了,因此“密钥”算法(Key Encoding)的概念被提出,与开头提到的智力题类似,此类算法通过一个

5、被称为“密钥”的凭据进行数据加密处理,接收方通过加密时使用的“密钥”字符串进行解密,即双方持有的“密码”相同(对称) 。如果接收方不能提供正确的“密钥” ,解密出来的就不是原来的数据了。以上是“对称密钥”的概念,那么“非对称密钥”又该怎么理解呢?有人用邮箱作为比喻,任何人都可以从邮箱的信封人口塞进信件,但是取信的权力却仅仅在于持有邮箱钥匙的人的手上。这个众人皆知的信封入口就是“公钥” (Public Key) ,而你持有的邮箱钥匙就是“私钥” (Private Key) ,这种算法规定,对方给你发送数据前,可以用“公钥”加密后再发给你,但是这个“公钥”也无法解开它自己加密的数据,即加密过程是单

6、向的,这样即使数据被途中拦截,入侵者也无法对其进行破解,能还原数据内容的只有“私钥”的持有者,这就是“非对称密钥”加密算法,也称为“公共密钥算法” ,这两者均建立在 PKI 验证体系结构上。基于“对称密钥”的加密算法有 DES、TripleDES、RC2、RC4、RC5和 Blowfish 等;基于“非对称密钥”的加密算法有 RSA、Diffie-Hellman 等。注:在 oracle 的加密包 dbms_obfuscation_toolkit 提供了DES、TripleDES(3-DES)的算法。DES 是一种较为强壮的数据加密算法,他的算法是公开的,全部的保密性都在于密钥的保密性上。所以

7、对于 DES(包括 DES)来说一个复杂的密钥是必须的,简单的密钥对于那些黑客来说形同虚设。现在的机器性能相比原来有了极大的提高,这也给暴力破解提供的物质上的准备。只要有足够的时间,一切密文都会被破解的。我们能做得就是采用极其复杂的密钥,des 常用语密码的保存之类。des 分为加密算法和解密算法PROCEDURE DESGETKEY(SEED_STRING VARCHAR2 IN,KEY VARCHAR2 OUT)-过程 1通过调用过程 DESGETKEY 可以产生一个相对复杂的密钥。其中参数SEED_STRING 是产生密钥需要的种子,KEY 为系统产生的密钥字符串。declare n_s

8、eed varchar2(100);n_key varchar2(100);beginn_seed := ssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaasdddddddddddddddsasssssssssssssssssssssssssssd;-产生密钥的种子不能太短,否则会报错dbms_obfuscation_toolkit.DESGETKEY(SEED_STRING = n_seed,key = n_key);dbms_output.put_line(n_out=|Utl_Raw.Cast_To_Raw(n_key)|长度=|leng

9、th(Utl_Raw.Cast_To_Raw(n_key);end;des 的加密过程:PROCEDURE DESENCRYPT(INPUT_STRING VARCHAR2 IN,KEY_STRING VARCHAR2 IN,ENcrypted_string VARCHAR2 OUT);其中参数 INPUT_STRING 是需要加密的字符串,参数KEY_STRING 是加密算法的密钥匙,而参数 ENcrypted_string 为得到的加密后的字符串PS; 需要加密的字符串必须是 8 的倍数,密钥的长度一定要大于8,但是密钥有效的位数是前 8 位(对于后面的位数长度是没有关系的),加密后的字符

10、串也是 8 的倍数declare en_in varchar2(100);en_key varchar2(100);en_out varchar2(100);beginen_in := abcdefgh;en_key := ssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaasdddddddddddddddsasssssssssssssssssssssssssssd;-产生密钥的种子不能太短,否则会报错dbms_obfuscation_toolkit.desENcrypt(INPUT_STRING = en_in,KEY_STRING = en_

11、key,ENCRYPTED_STRING = en_out);dbms_output.put_line(n_out=|Utl_Raw.Cast_To_Raw(en_out)|长度=|length(Utl_Raw.Cast_To_Raw(en_out)|en_out);end;A7631639A69C3FD8des 解密过程:PROCEDURE DESDECRYPT(INPUT_STRING VARCHAR2 IN,KEY_STRING VARCHAR2 IN,DEcrypted_string VARCHAR2 OUT);其中参数 INPUT_STRING 是需要解密的字符串,参数KEY_STR

12、ING 是加密算法的密钥匙,而参数 DEcrypted_string 为得到的解密后的字符串PS; 需要解密的字符串必须是 8 的倍数,密钥的长度一定要大于8,但是密钥有效的位数是前 8 位(对于后面的位数长度是没有关系的),解密后的字符串也是 8 的倍数-raw 是 16 进制类型declare en_in raw(100);en_key varchar2(100);en_out varchar2(100);beginen_in := A7631639A69C3FD8;en_key := ssssssssssssssssssssssssssssssssssaaaaaaaaaaaaaaaasd

13、ddddddddddddddsasssssssssssssssssssssssssssd;-产生密钥的种子不能太短,否则会报错()dbms_obfuscation_toolkit.desDEcrypt(INPUT_STRING =Utl_Raw.Cast_To_varchar2(en_in),KEY_STRING = en_key,DEcrypted_string = en_out);dbms_output.put_line(n_out=|en_out|长度=|length(en_out);end;- des3 加密解密过程加密过程DES3Encrypt(input VARCHAR2 IN,k

14、ey VARCHAR2 IN,encrypted_data VARCHAR2 OUT,which VARCHAR2 IN);PS: 参数 input 是需要加密的字符串,key 是加密算法的密钥,参数 encrypted_data 是加密后输出的字符串,which 参数当 0,使用TwoKeyMode.如果等于 1,使用 ThreeKeyMode .默认选择 1 就行了declare en_in raw(100);en_key varchar2(100);en_out varchar2(100);beginen_in := qwertyui;en_key := qwewqeqweqweq;-产

15、生密钥的种子不能太短,否则会报错()dbms_obfuscation_toolkit.DES3Encrypt(input = en_in,key = en_key,encrypted_data = en_out,which = 1);解密过程DES3Decrypt(input VARCHAR2 IN,key VARCHAR2 IN,decrypted_data VARCHAR2 OUT,which VARCHAR2 IN); select to_char(sysdate,d) from dualdecode(to_char(sysdate,d),2,to_char(sysdate-7,YYYYmmdd),-星期 16,to_char(sysdate-4,YYYYmmdd) ,7,to_char(sysdate-5,YYYYmmdd)|083000

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号