dbms_crypto函数包的简单介绍

dbms_crypto函数包的简单介绍[@more@]

dbms_crypto是系统函数包,创建在sys用户下。提供了加密、解密数据的接口,支持多种行业标准的加密与哈希算法,包括AES(the Advanced Encryption Standard)对称密码新标准,该标准由NIST(the National Institute of Standards and Technology )美国国家标准技术研究所提供,替代DES(the Data Encryption Standard)数据加密标准。

dbms_crypto函数包可以对oracle的通用数据类型进行加密和解密,包括RAW、LOB,比如图像、声音等,同样也支持BLOB、CLOB。另外,提供了全球化支持,得以在不同字符集的数据库之间进行数据加密与解密工作。

支持以下加密算法:
Data Encryption Standard (DES), Triple DES (3DES, 2-key and 3-key)
Advanced Encryption Standard (AES)
MD5, MD4, and SHA-1 cryptographic hashes
MD5 and SHA-1 Message Authentication Code (MAC)

函数包也提供Block cipher modifiers(分组密码编辑器)。

限制:
varchar2的数据类型不被直接支持。必须将其转换成AL32UTF8统一的字符集形式,然后将其转换成RAW的数据类型之后才可以。

包里包含名为ENCRYPT和DECRYPT的过程和函数。过程用来操作LOB数据类型,与之对比,函数则用来操作RAW数据。

包里包含两类单向哈希函数:HASH和MAC。HASH函数可以将一个变长的数据计算出一个定长的哈希值,支持RAW类型和LOB类型。但不能通过一个特定的哈希值,计算出与之对应的原数据。hash值至少为128bit。
MAC函数也是单向哈希函数,但多一个安全key的附加条件。和HASH函数的用法一样。但如果需要安全key对哈希值进行校验,只能用MAC函数。
MAC可以用来在不同的用户之间对文件进行鉴定认证。也可以在单用户情况下用来判断文件是否被修改过,也许就是病毒干的。用户将文件通过MAC计算出来的值存在某个表里。如果用户没有用MAC进行校验,病毒有可能修改文件之后生成一个新的哈希值,替换掉原表里的记录。如果使用了MAC的安全key,就不可能出现正常情况,因为病毒不知道这个key是什么。

为了安全起见,加密和解密操作最好在服务端进行,确保安全key的安全生成和安全维护。如果安全key需要通过客户端和服务端之间的连接传送,网络连接必须要通过网络加密来保证安全。尽管DBMS_CRYPTO不能直接生成key,但提供了工具帮助key的生成。比如,可以为key通过RANDOMBYTES函数生成随机
数据。

数据转换
以下两个例子实现字符和RAW类型的转换:
字符转RAW:UTL_I18N.STRING_TO_RAW (string, 'AL32UTF8');
RAW转字符:UTL_I18N.RAW_TO_CHAR (data, 'AL32UTF8');

SQL> select UTL_I18N.STRING_TO_RAW ('Aaa', 'AL32UTF8') test from dual;

TEST
-------------------------------------------------------------------------------

416161

SQL> select UTL_I18N.RAW_TO_CHAR ('416161', 'AL32UTF8') test from dual;

TEST
-------------------------------------------------------------------------------

Aaa

函数包包含以下过程和函数:
函数DECRYPT:Decrypts RAW data using a stream or block cipher with a user supplied key and optional IV (initialization vector)
过程DECRYPT:Decrypts LOB data using a stream or block cipher with a user supplied key and optional IV
函数ENCRYPT:Encrypts RAW data using a stream or block cipher with a user supplied key and optional IV
过程ENCRYPT:Encrypts LOB data using a stream or block cipher with a user supplied key and optional IV
函数HASH:Applies one of the supported cryptographic hash algorithms (MD4, MD5, or SHA-1) to data
函数MAC:Applies Message Authentication Code algorithms (MD5 or SHA-1) to data to provide keyed message protection
函数RANDOMBYTES:Returns a RAW value containing a cryptographically secure pseudo-random sequence of bytes, and can be used to generate random material for encryption keys
函数RANDOMINTEGER:Returns a random BINARY_INTEGER
函数RANDOMNUMBER:Returns a random 128-bit integer of the NUMBER datatype

语法说明:
FUNCTION DBMS_CRYPTO.DECRYPT(
src IN RAW, --RAW data to be decrypted
typ IN PLS_INTEGER, --Stream or block cipher type and modifiers to be used.
key IN RAW, --Key to be used for decryption
iv IN RAW DEFAULT NULL --Optional initialization vector for block ciphers. Default is NULL
) RETURN RAW;

PROCEDURE DBMS_CRYPTO.DECRYPT(
dst IN OUT NOCOPY BLOB|(CLOB CHARACTER SET ANY_CS), --LOB locator of output data. The value in the output LOB will be overwritten
src IN BLOB, --LOB locator of input data
typ IN PLS_INTEGER, --Stream or block cipher type and modifiers to be used.
key IN RAW, --Key to be used for decryption
iv IN RAW DEFAULT NULL --Optional initialization vector for block ciphers. Default is all zeroes
);

FUNCTION DBMS_CRYPTO.ENCRYPT(
src IN RAW, --RAW data to be encrypted
typ IN PLS_INTEGER, --Stream or block cipher type and modifiers to be used
key IN RAW, --Encryption key to be used for encrypting data
iv IN RAW DEFAULT NULL --Optional initialization vector for block ciphers. Default is NULL
) RETURN RAW;

PROCEDURE CRYPTO.ENCRYPT(
dst IN OUT NOCOPY BLOB, --LOB locator of output data. The value in the output LOB will be overwritten
src IN BLOB|(CLOB CHARACTER SET ANY_CS), --LOB locator of input data
typ IN PLS_INTEGER, --Stream or block cipher type and modifiers to be used
key IN RAW, --Encryption key to be used for encrypting data
iv IN RAW DEFAULT NULL --Optional initialization vector for block ciphers. Default is NULL
);

FUNCTION DBMS_CRYPTO.Hash (
src IN RAW|BLOB|(CLOB CHARACTER SET ANY_CS), --The source data to be hashed
typ IN PLS_INTEGER --The hash algorithm to be used
) RETURN RAW;

FUNCTION DBMS_CRYPTO.MAC (
src IN RAW|BLOB|(CLOB CHARACTER SET ANY_CS), --The source data to be hashed
typ IN PLS_INTEGER, --The hash algorithm to be used
key IN RAW --Key to be used for MAC algorithm
) RETURN RAW;

FUNCTION DBMS_CRYPTO.RANDOMBYTES (
number_bytes IN POSITIVE --The number of pseudo-random bytes to be generated
) RETURN RAW;

FUNTION DBMS_CRYPTO.RANDOMINTEGER
RETURN BINARY_INTEGER;

FUNCTION DBMS_CRYPTO.RANDOMNUMBER
RETURN NUMBER;

以下是用sha-1算法进行哈希值计算的实例,'Aaa'算出来的值是'F782740F6340DB75FD2AF699D8470AF3CCAA9068':
declare
n varchar2(3000);
begin

select dbms_crypto.Hash(UTL_I18N.STRING_TO_RAW('Aaa', 'AL32UTF8'),
dbms_crypto.HASH_SH1)
into n
from dual;
dbms_output.put_line(n);
end;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13162384/viewspace-1048474/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/13162384/viewspace-1048474/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DBMS_CRYPTO 是 Oracle 数据库提供的一个加密,可以用于在数据库中进行数据加密和解密。要安装 DBMS_CRYPTO ,可以按照以下步骤进行: 1. 使用 SQL*Plus 或其他数据库客户端连接到你的 Oracle 数据库。 2. 确认你的数据库版本是否支持 DBMS_CRYPTO DBMS_CRYPTO 是在 Oracle 10g 及以后版本中引入的。 3. 确认你的数据库用户具有创建的权限。可以使用以下命令来授予权限: ``` GRANT CREATE PROCEDURE, CREATE ANY PROCEDURE, EXECUTE ANY PROCEDURE TO <username>; ``` 其中,<username> 是你的数据库用户名。 4. 运行 dbmscrypto.sql 脚本文件。在 SQL*Plus 中,可以使用以下命令来运行该文件: ``` @?/rdbms/admin/dbmscrypto.sql ``` 该命令将自动查找 dbmscrypto.sql 文件并运行它。如果该命令无法找到文件,请确认你的 ORACLE_HOME 环境变量是否设置正确。 5. 确认 DBMS_CRYPTO 已经被正确安装。可以使用以下命令来检查 DBMS_CRYPTO 是否存在: ``` SELECT * FROM all_objects WHERE object_name LIKE 'DBMS_CRYPTO'; ``` 如果该存在,则说明安装成功。 安装完成后,你可以使用 DBMS_CRYPTO 中的函数来进行加密和解密操作。例如,可以使用以下语句将字符串 'hello' 进行 AES256 加密: ``` SELECT DBMS_CRYPTO.ENCRYPT('hello', DBMS_CRYPTO.ALG_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5); ``` 这将返回一个经过 AES256 加密的字符串。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值