MIME标准定义了一种编码,我们称之为base64。这个标准定义了一系列的ASCII字符来描述64个特定值。在许多早期的HTTP网络服务器中,在HTTP的认证中的密码一般都使用base64进行编码的。
在数据库内能把二进制的数据编码或者解码成base64文本就可以用存储过程从e-mail和HTTP服务器认证发送数据并解码。
Oracle9i就支持一个能对base64进行编码和解码的PL/SQL的包,这就像uuencode和绰号引起来的可打印格式一样,具体操作例如以下代码:
SQL> select utl_encode.base64_encode(hextoraw('0102'))
from dual;
4151493D
SQL> select utl_encode.base64_decode(hextoraw('4151493D'))
from dual;
0102
这些函数的返回结果是一个RAW函数,所以你需要采用UTL_RAW.CAST_TO_VARCHAR来把它作为VARCHAR2型结果来使用。如果你不用CAST_TO_VARCHAR的话,数据可将自动的将这些RAW值转化为十六进制数据:
SQL>selectutl_raw.cast_to_varchar2_
(utl_encode.base64_encode(hextoraw('0102')))
from dual;
AQI=
当然,在Java中也提供了许多能有效对base64进行编码解码的类,任何一个都能用做存储过程,有了UTL_RAW的帮助,在纯PL/SQL方式下编码方法写起来就非常简单了(这种编码方法在Oracle8中也可以用)。
现在当需要对base64进行编码的时候,你应该能将其来回的转换::
SQL> select base64.encode(hextoraw('0102')) from dual;
AQI=
SQL> select base64.decode('AQI=') from dual;
0102