SQLNET.ENCRYPTION_SER VER =REQUESTED, SQLNET.ENCRYPTION_TYP ES_SERVER = RC4_256, SQLNET.CRYPTO_CHECKS UM_SERVER = REQUESTED
时间: 2024-04-24 07:23:45 浏览: 187
根据您提供的信息,这段Oracle配置文件是用于配置SQL*Net网络连接的加密选项。以下是对每个配置项的解释:
1. SQLNET.ENCRYPTION_SERVER = REQUESTED:这个配置项指示服务器端要求使用加密进行通信。如果客户端不支持加密或未配置加密,连接将被拒绝。
2. SQLNET.ENCRYPTION_TYPES_SERVER = RC4_256:这个配置项指定了服务器端允许的加密算法。在这种情况下,服务器将使用RC4_256算法进行加密。RC4_256是一个对称加密算法,使用256位密钥长度。
3. SQLNET.CRYPTO_CHECKSUM_SERVER = REQUESTED:这个配置项指示服务器端要求使用加密进行数据完整性检查。这意味着在传输数据时,会计算校验和以确保数据未被篡改。
通过这些配置项,服务器要求客户端使用加密进行通信,并指定了加密算法和数据完整性检查的要求。请注意,具体的配置可能因Oracle版本和安全策略而有所不同。
相关问题
grant execute on dbms_crypto to system; declare input_string VARCHAR2 (200) := 'Secret Message'; output_string VARCHAR2(2000); encrypted_raw RAW(2000); decrypted_raw RAW(2000); num_key_bytes NUMBER := 256/8; key_bytes_raw RAW(32); encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; begin DBMS_OUTPUT.PUT_LINE(input_string); key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes); encrypted_raw := DBMS_CRYPTO.ENCRYPT ( src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw ); decrypted_raw := DBMS_CRYPTO.DECRYPT ( src => encrypted_raw, typ => encryption_type, key => key_bytes_raw ); output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8'); DBMS_OUTPUT.PUT_LINE(output_string); end; declare l_src_data varchar2(20); l_type pls_integer :=DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_encval raw(2000); CURSOR secret_cursor IS select phonenumber from customer; begin OPEN secret_cursor; LOOP FETCH secret_cursor INTO l_src_data; l_encval :=dbms_crypto.encrypt( src=>utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); DBMS_OUTPUT.PUT_LINE (l_encval); EXIT WHEN secret_cursor%NOTFOUND; END LOOP; CLOSE secret_cursor; end; declare ;_src_data row(100) :=hextoraw("190248129038903853275ijdkvjkad'); l_type pls_integer :=dbms_crypto.encrypt_aes128+ + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5; l_key varchar2(20) :='0123456789123456'; l_decval raw(200); begin l_decval :=dbms_crypto.decrypt( src=>l_src_data, typ=>l_type, key=>utl_i18n.string_to_raw(l_key,'AL32UTF8')); end; SELECT Price FROM PRODUCT WHERE ProductID = 5;修正这一段代码
以下是修正后的代码:
```
grant execute on dbms_crypto to system;
-- 第一个代码块
declare
input_string VARCHAR2 (200) := 'Secret Message';
output_string VARCHAR2(2000);
encrypted_raw RAW(2000);
decrypted_raw RAW(2000);
num_key_bytes NUMBER := 256/8;
key_bytes_raw RAW(32);
encryption_type PLS_INTEGER := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
begin
DBMS_OUTPUT.PUT_LINE(input_string);
key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES(num_key_bytes);
encrypted_raw := DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW(input_string, 'AL32UTF8'), typ => encryption_type, key => key_bytes_raw);
decrypted_raw := DBMS_CRYPTO.DECRYPT(src => encrypted_raw, typ => encryption_type, key => key_bytes_raw);
output_string := UTL_I18N.RAW_TO_CHAR(decrypted_raw, 'AL32UTF8');
DBMS_OUTPUT.PUT_LINE(output_string);
end;
-- 第二个代码块
declare
l_src_data varchar2(20);
l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
l_key varchar2(20) := '0123456789123456';
l_encval raw(2000);
cursor secret_cursor is select phonenumber from customer;
begin
open secret_cursor;
loop
fetch secret_cursor into l_src_data;
exit when secret_cursor%notfound;
l_encval := dbms_crypto.encrypt(src => utl_i18n.string_to_raw(l_src_data,'AL32UTF8'), typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8'));
dbms_output.put_line(l_encval);
end loop;
close secret_cursor;
end;
-- 第三个代码块
declare
l_src_data raw(100) := hextoraw('190248129038903853275ijdkvjkad');
l_type pls_integer := DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
l_key varchar2(20) := '0123456789123456';
l_decval raw(200);
begin
l_decval := dbms_crypto.decrypt(src => l_src_data, typ => l_type, key => utl_i18n.string_to_raw(l_key,'AL32UTF8'));
end;
-- SQL 查询语句
SELECT Price FROM PRODUCT WHERE ProductID = 5;
```
注意:第三个代码块中的 `l_src_data` 变量的赋值语句中,修正了单引号和双引号的不匹配问题。
纠正DECLARE i_key RAW(32); BEGIN i_key :=UTL_RAW.cast_to_raw('618272'); UPDATE SALARY SET SalaryAmount = DBMS_CRYPTO.ENCRYPT( UTL_RAW.CAST_TO_RAW(SalaryAmount), DBMS_CRYPTO.AES_CBC_PKCS5, key=>i_key, iv=>NULL ) WHERE SalaryAmount IS NOT NULL; END; /
感谢您的纠正!这段代码是使用 Oracle 数据库的 DBMS_CRYPTO 包进行 AES-256-CBC 加密的 SQL 语句。下面是经过纠正的代码:
```
DECLARE
i_key RAW(32);
BEGIN
i_key := UTL_RAW.cast_to_raw('618272');
UPDATE SALARY
SET SalaryAmount = DBMS_CRYPTO.ENCRYPT(
src => UTL_RAW.CAST_TO_RAW(SalaryAmount),
typ => DBMS_CRYPTO.AES_CBC_PKCS5,
key => i_key,
iv => NULL
)
WHERE SalaryAmount IS NOT NULL;
END;
/
```
在 `DBMS_CRYPTO.ENCRYPT` 函数中,第一个参数是原始数据(plaintext),第二个参数是加密算法的类型(这里是 AES-256-CBC),第三个参数是加密密钥,第四个参数是初始化向量(IV),这里将 IV 设为 NULL,表示使用默认值。
需要注意的是,这段代码只是对数据库中的某个表的某个字段进行加密,并不是对整个数据库进行加密。如果需要对整个数据库进行加密,需要使用其他方法,比如 Oracle Transparent Data Encryption(TDE)。
阅读全文