Oracle加密解密

本文介绍了如何在Oracle数据库中使用内置的dbms_crypto包进行RC4加密和解密操作,包括配置环境、创建加密函数、授权及使用示例。详细阐述了RC4算法的特点,并列举了Oracle支持的其他加密方式。
摘要由CSDN通过智能技术生成

        本文使用Oracle内置Package加密解密方法,Oracle从10gR2版本开始支持这个包,利用这个函数可以对字段进行加解密,本包内置了多种加密解密方式(详见说明1),可以多个加密方式并行组合使用,也可独立使用,本次主要讲解RC4加密解密。

        在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加密解密使用相同的密钥,因此也属于对称加密算法。RC4是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。

       内置加密函数dbms_crypto.Encrypt,需要三个参数,第一个参数是raw类型的待加密字符串,第二个参数是加密方式,第三个参数是密钥,可以随机密钥,也可以固定密钥,也可以每个内容对应一个密钥,由于系统需要使用模糊匹配,本文采用固定密钥。

配置环境:包含以下两种方式,为方便多用户使用,本文采用第二种方式。

        方式一、授权普通用户使用加密包。

       方式二、创建加密函数到sys用户,然后授权给普通用户,为使用方便,在普通用户创建同义词。

步骤:

        第一步、登录进入sysdba用户;

        第二步、创建函数(函数已提供,可修改密钥,然后直接编译即可,内容见说明2),由于系统需要使用模糊匹配,故密钥已固定;

        第三步、授权函数给普通用户;

                grant execute on code to scott;

        第四步、创建同义词;

                create synonym code for sys.code;

使用示例:

        1、加密

                select code('12','encode') from dual;

        2、解密

                select code('0','decode') from dual;

        3、plsql程序块

declare
    a varchar2(500) := '123456';
begin
    --加密
    select code(a, 'encode') into a from dual;
    dbms_output.put_line(a);
    --解密
    select code(a, 'decode') into a from dual;
    dbms_output.put_line(a);
end;

 

        说明1:Oracle内置的多种加密方式

                ENCRYPT_DES:标准数据加密。有效的键长度为56位,

                ENCRYPT_3DES_2KEY:修改过的3DES,用两个密钥对每个数据块加密3次。有效的键长度为112位。

                ENCRYPT_3DES:对每一个数据块加密3次。有效的键长度为156位。

                ENCRYPT_AES128:高级加密标准。有效的键长度为128位。

                ENCRYPT_AES192: 高级加密标准。有效的键长度为192位。

                ENCRYPT_AES256: 高级加密标准。有效的键长度为256位。

               ENCRYPT_RC4:唯一一个流加密,它被用于加密数据流,而不是离散数据或是表态数据。

                DBMS_CRYPTO包的填充常量:

                PAD_PKCS5:用PKCS#5填充。

                PAD_ZERO:用零填充。

              

PAD_NONE:不进行填充,如果假设数据块的长度正好是8个字节,则可以使用这个方法。

                DBMS_CRYPT0包的连接常量:

                CHAIN_CBC:密码块连接,是最常用的方法。

                CHAIN_CFB:加密反馈模式。

                CHAIN_ECB:电子源码书格式。

                CHAIN_OFB:输入回馈模式。

        说明2:自定义加密函数

create or replace function code(str varchar2, v_type varchar2)
    return varchar2
    is
BEGIN
    if p_type = 'encode' then
        return utl_raw.cast_to_varchar2(dbms_crypto.Encrypt(utl_raw.cast_to_raw(str), dbms_crypto.ENCRYPT_RC4,utl_raw.CAST_TO_RAW('test+123456')));
    elsif p_type = 'decode' then
        return utl_raw.cast_to_varchar2(dbms_crypto.Decrypt(utl_raw.cast_to_raw(str), dbms_crypto.ENCRYPT_RC4,utl_raw.CAST_TO_RAW('test+123456')));
    else
        return str;
    end if;
exception
    when others then
        return str;
END;
/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值