如何在Oracle中解密PBEWithMD5AndDES字符串?

时间:2016-06-22 04:13:17

标签: sql oracle plsql oracle11g

在我的用户表中,用户名列是通过PBEWithMD5AndDES算法编码的。现在我想要这样的东西:

WITH TEMP
 AS (SELECT E.UAC_USER_ID AS ID,
            E.UAC_USER_USERNAME AS USERNAME,
            E.UAC_USER_FIRSTNAME || ' ' || E.UAC_USER_LASTNAME AS NAME,
            E.UAC_USER_PERSONELCODE AS PERSONELCODE
       FROM UAC_USERS E
      WHERE E.UAC_USER_ISENABLED = 1)
SELECT *
 FROM TEMP
WHERE 1 = 1 AND DECODE (USERNAME) = 'admin'

oracle中是否有可以解码所选字段的嵌入式函数?

1 个答案:

答案 0 :(得分:1)

我只能给你解决问题的方向,而不是回答。

Oracle有一个dbms_crypto包,可能可以帮助你。

参见示例https://docs.oracle.com/database/121/ARPLS/d_crypto.htm#ARPLS65690 你可以找到encryption_type

 encryption_type    PLS_INTEGER :=          -- total encryption type
                            DBMS_CRYPTO.ENCRYPT_AES256
                          + DBMS_CRYPTO.CHAIN_CBC -- description in doc
                          + DBMS_CRYPTO.PAD_PKCS5; -- description in doc

在DBMS_CRYPTO中,还有另一个常量DBMS_CRYPTO.ENCRYPT_PBE_MD5DES。 从理论上讲,这可能会有所帮助:

 encryption_type    PLS_INTEGER :=          -- total encryption type
                                DBMS_CRYPTO.ENCRYPT_PBE_MD5DES
                              + DBMS_CRYPTO.CHAIN_CBC -- description in doc
                              + DBMS_CRYPTO.PAD_PKCS5; -- description in doc

但是在代码中使用此encryption_type会出错。我也尝试了几种组合并改变代码,但最后我放弃了。可能是其中一个原因是DBMS_CRYPTO.ENCRYPT_PBE_MD5DES不在doc中描述,或者我应该在示例中更改smt else。