那个页面被墙 只好在这复制下了
目前主流的加密方法大致有MD5、SHA-1、DES、Triple DES、AES,目前MD5、SHA-1、DES都已经有破解方法,Triple DES、AES还没有被破解的记载,其中AES是最新最安全的加密方法,最多可提供256位的加密。
Oracle 9i提供MD5、DES、Triple DES,而Oracle 10g和10g R2提供了上面提到的所有加密方法供选择。
鉴于以上情况,针对Oracle 10g,我的想法是使用DBMS_CRYPTO包提供的Triple DES或者AES进行加密(Oracle 9i中没有这个包)。
与其他方法相比,这样做的优点是:
1. Triple DES、AES是最安全的加密方法,没有被破解的记载
2. 有可逆和不可逆两种加密选择
3. 支持对BLOB和CLOB加密
1.脚本
-----------------------------------------------------------------------------------------
加密函数
- create or replace function encrypt256(v_input varchar2) return raw
- is
- v_result raw(256);
- c_key char(32) := '1q2wa3es4rz5tx6ycD*UF8tif9ogjen2';
- begin
- v_result := DBMS_CRYPTO.ENCRYPT(
- UTL_I18N.STRING_TO_RAW(v_input, 'AL32UTF8'),
- DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5,
- UTL_I18N.STRING_TO_RAW(c_key, 'AL32UTF8'));
- return v_result;
- end;
- /
解密函数
- create or replace function decrypt256(v_input raw) return varchar2
- is
- v_result raw(256);
- c_key char(32) := '1q2wa3es4rz5tx6ycD*UF8tif9ogjen2';
- begin
- v_result := DBMS_CRYPTO.DECRYPT(
- v_input,
- DBMS_CRYPTO.ENCRYPT_AES256+DBMS_CRYPTO.CHAIN_CBC+DBMS_CRYPTO.PAD_PKCS5,
- UTL_I18N.STRING_TO_RAW(c_key, 'AL32UTF8'));
- return UTL_I18N.RAW_TO_CHAR(v_result, 'AL32UTF8');
- end;
- /