版权声明:本文可以自由转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
作者:叶枫(http://blog.matrix.org.cn/page/叶枫)
原文:[http://www.matrix.org.cn/resource/article/44/44020_Oracle.html]http://www.matrix.org.cn/resource/article/44/44020_Oracle.html[/url]
关键字:Oracle 加密 解密
为了保护敏感数据,oracle从8i开始提供一个数据加密包:dbms_obfuscation_toolkit.利用这个包,我们可以对数据进行DES,Triple DES或者MD5加密. 本文就此讲解如何使用以及使用过程需要注意的问题.
1. dbms_obfuscation_toolkit简介
dbms_obfuscation_toolkit主要有一下几个存储过程:-
DESGETKEY -- 产生密钥,用于DES算法
DES3GETKEY -- 产生密钥,用于Triple DES算法
DESENCRYPT -- 用DES算法加密数据
DESDECRYPT -- 用DES算法解密数据
DES3ENCRYPT -- 用Triple DES算法加密数据
DES3DECRYPT -- 用DES算法解密数据
MD5 -- 用MD5算法加密数据
2. 准备数据表
在开始前,我们先创建表users:
drop table users;
create table users(
userid varchar2(50) primary key,
password varchar2(64), --密码原文
encrypted varchar2(64) --加密后的密码
);
insert into users values ('user1','user1234',null);
insert into users values ('user2','abcd1234',null);
insert into users values ('user3','oracle12',null);
commit;
3. 创建包PG_ENCRYPT_DECRYPT
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_DECRYPT is
function GEN_RAW_KEY ( iKey in varchar2)
return raw
as
rawkey raw(240) := '';
begin
for i in 1..length(iKey) loop
rawkey := rawkey||hextoraw(to_char(ascii(substr(iKey, i, 1))));
end loop;
return rawkey;
end;
/*
Creating function DECRYPT_3KEY_MODE
*/
FUNCTION DECRYPT_3KEY_MODE (
iValue in raw, iMode in pls_integer
)
return varchar2
as
vDecrypted varchar2(4000);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
-- decrypt input string
vDecrypted := dbms_obfuscation_toolkit.des3decrypt (
UTL_RAW.CAST_TO_VARCHAR2(iValue)
, key_string => rawkey
, which => iMode
);
return vDecrypted;
end;
/*
Creating function ENCRYPT_3KEY_MODE
*/
FUNCTION ENCRYPT_3KEY_MODE (
iValue in varchar2, iMode in pls_integer
)
return raw
as
vEncrypted varchar2(4000);
vEncryptedRaw Raw(2048);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
-- encrypt input string
vEncrypted := dbms_obfuscation_toolkit.des3encrypt (
iValue
, key_string => rawkey
, which => iMode
);
-- convert to raw as out
vEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted);
return vEncryptedRaw;
end;
end;
4. 测试
在SQL Plus下输入:
SQL > update users set encrypted = PG_ENCRYPT_DECRYPT.ENCRYPT_3KEY_MODE(password,1);
SQL > commit;
执行完以上SQL语句后,encrypted 存储的就是加密后的password字段.我们看一下结果:-
SQL > select * from users;
USERID PASSWORD ENCRYPTED
------ --------- ----------------
user1 user1234 69EF3A211A0F2C32
user2 abcd1234 CF7562203F6CEDE5
user3 oracle12 65D71D7148FA001D
这个加密结果是否正确? 我们对加密结果解密就知道了,在SQL Plus下输入:
SQL > select userid,password,PG_ENCRYPT_DECRYPT.DECRYPT_3KEY_MODE(encrypted,1) DECRYPTED from users;
USERID PASSWORD DECRYPTED
------ --------- ----------
user1 user1234 user1234
user2 abcd1234 abcd1234
user3 oracle12 oracle12
大家可以看到,解密结果和密码原文完全一模一样.这说明我们的加密解密过程是正确的.
5. 进一步思考
我们再看一下表users:-
create table users(
userid varchar2(50) primary key,
password varchar2(64), --密码原文
encrypted varchar2(64) --加密后的密码
);
还有我们插入的数据:-
insert into users values ('user1','user1234',null);
insert into users values ('user2','abcd1234',null);
insert into users values ('user3','oracle12',null);
以及加密输出结果:-
[/code]
USERID PASSWORD ENCRYPTED
------ --------- ----------------
user1 user1234 69EF3A211A0F2C32
user2 abcd1234 CF7562203F6CEDE5
user3 oracle12 65D71D7148FA001D
[/code]
不知细心的朋友注意到没有? 在表中,password 和 encrypted 的长度都是64,
都是8的倍数, 再看一下我们的密码原文和加密后的密码也是8的倍数,这不是
巧合,而是DES算法和Triple DES算法的特征之一. 输入长度必须是8的倍数,
而输出也是8的倍数,所以我们的字段长度也是8的倍数. 如果输入不是8的倍数
会怎样? 大家可以把密码原文修改一下试试.
6. 密钥的保存
不管我们用什么样的加密算法,有一点非常重要的是: 密钥的保存.
密钥就是一把钥匙,因为加密算法是公开的,所以你无论如何加密,
只要我知道你的密钥,我就可以解密,那么你的加密就没有效果.
在本文中, 我们的密钥是这样定义的:-
iKey varchar2(8):='oracle9i';
oracle9i就是我们的密钥.
所以,如果只是简单地把以上程序在oracle上运行一下就使用,那么任何有权限登陆
的人看到这个程序,就可以知道密钥. 所以简单的做法是利用Oracle提供的WRAP
把整个程序加密,用加密后的文本创建程序. 这样别人就看不到你的源代码了.
把程序保存为source.sql,在Dos命令下输入:-
Wrap iname=source.sql oname=target.sql
就可以了,然后SQL Plus运行target.sql.
当然了, 这里讲的密钥保存还是很简单的. 并不是百分百保险. 大家可以自己
想想如何更安全地保持你的密钥.
分享到:
相关推荐
Oracle加密技术是保护数据库中敏感数据安全的重要手段,它利用一系列的加密算法将明文数据转换为密文,确保数据即便在遭受未授权访问时也难以被解读。加密技术包括不同的算法分类,每种算法有其特定的用途和安全性。...
1、oracle 数据表或者部分列加密 1.1 oracle 对称加密与非对称加密算法及密钥保管 1.2 部分字段加密 2、oracle 数据表或者行、列访问控制 3、2者结合解决项目实际过程中的问题 主要技术要点: 1、oracle 源代码...
### Oracle 加密与解密知识点解析 #### 一、Oracle 加密解密概述 Oracle 数据库提供了多种方式来实现数据的加密与解密功能,这对于保护敏感数据具有重要意义。在不同的 Oracle 版本中(如 Oracle 9i 和 10g),...
下面,我们将详细解析这两种加密方式,并对Oracle加密知识点进行深入探讨。 1. Oracle Wallet加密 Oracle Wallet加密是一种数据库安全技术,它通过使用密钥和证书对敏感数据进行加密,以保证数据的机密性和完整性。...
3、兼容性与灵活性: 适用于各种 Oracle 数据库环境,无论是本地部署还是云数据库,均可无缝集成,满足不同场景需求。 4、详尽注释文档: 提供了完整的函数代码及详细的注释说明,便于用户快速理解与应用,同时降低...
oracle 加密破解
oracle存储过程加密破解 0
因Oracle暂不支持对视图(View)的加密,在实际工作中有时需提供给第三方只读账户,为保护知识产权,可用文中所述方法防止第三方账户查看视图(View)中的SQL代码。
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其安全性与数据加密功能对于保护企业敏感信息至关重要。在开发或维护Oracle数据库应用时,有时我们需要对已加密的代码或数据进行反编译或解密,以便理解其...
在Oracle数据库中,为了保障数据的安全性和保护敏感的业务逻辑,有时我们需要对存储过程进行加密。这在多公司共享同一数据库服务器的场景中尤为重要,因为这样可以确保各公司的数据和服务独立性,同时允许必要的数据...
"Oracle 加密和编辑技术" Oracle Advanced Security 是 Oracle Database 12c 中的一种安全解决方案,旨在保护数据库免受非法访问和数据泄露的威胁。通过 Oracle Advanced Security,可以实现加密和编辑,以保护敏感...
oracle db内部的package全部是加密的,需要解密使用oracle wrap加密过的程序包,而unwrap解密工具可以拿到明文的package源代码。 解密的理论依据都来源于 "The oracle hacker's handbook" by David Litchfield 这...
Oracle 透明数据加密(TDE)是Oracle数据库提供的一种安全特性,用于保护敏感数据免受未经授权的访问。TDE能够对存储在特定列或整个表空间中的数据进行加密,确保即使数据文件被盗,数据仍保持安全。以下是关于TDE的...
在Windows 10操作系统中,用户可能会遇到一种特定的远程连接问题,这通常与CredSSP(Credential Security Support Provider)协议和Oracle加密有关。CredSSP是一种身份验证协议,用于在客户端和服务器之间安全地传递...
Oracle数据库作为一种企业级的数据库管理系统,提供了多种方式来实现MD5加密,这对于确保数据的安全性至关重要。本文将深入探讨如何在Oracle中实现MD5加密,并通过具体示例代码进行说明。 ### Oracle实现MD5加密的...
Oracle数据加密技术包括了多个方面的知识点,从基础的数据加密原理到Oracle数据库中实际使用的加密技术,以及如何在不同版本的Oracle中实现数据加密。以下内容将详细介绍Oracle数据加密的知识点。 数据加密是一种...
Oracle数据加密是数据库安全的重要组成部分,它保护存储在Oracle数据库中的敏感信息,如个人身份信息、财务记录等,防止未经授权的访问。Oracle提供了多种加密技术,以满足不同级别的安全需求和法规遵从性要求。 ...
在提供的文件列表中,`fyunwrap_full_gb.exe` 和 `fyunwrap_full_utf8.exe` 是两个可能用于解密Oracle加密对象的工具。FyUnwrap是一个常用的第三方工具,它能帮助我们解密Oracle的加密包。`mfc71d.dll`, `msvcp71d....
在Oracle 11G中,加密表空间是一项重要的安全特性,它允许数据库管理员对整个表空间的数据进行加密,而不仅仅是特定的列或表。这种技术的引入极大地增强了数据的安全性,因为它不仅保护了数据库中的数据,还防止了...
### Oracle存储过程加密知识点 #### 一、Oracle存储过程与加密背景 在Oracle数据库中,存储过程是一种数据库对象,它可以包含一系列SQL语句和过程化SQL代码,用于执行复杂的业务逻辑。存储过程不仅可以提高应用...