我正在尝试使用 Oracle 11g 中的 Bcrypt 算法保存用户密码。我知道这可以在 Java 中轻松完成,但在这种情况下,我想在 DB 端执行此操作。任何人都可以帮助我实现这一目标。
目前我正在使用 SHA256,它是通过 Java 存储过程完成的,因为 11g 仅支持 SHA1 .. :(
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED SHA256 AS
import java.security.MessageDigest;
import oracle.sql.*;
public class SHA256
{
public static oracle.sql.RAW get_digest( String p_string ) throws Exception
{
MessageDigest v_md = MessageDigest.getInstance( "SHA-256" );
byte[] v_digest;
v_digest = v_md.digest( p_string.getBytes( "UTF-8" ) );
return RAW.newRAW(v_digest);
}
}
CREATE OR REPLACE FUNCTION SHA256_ENCRYPT(p_string VARCHAR2)
RETURN RAW
AS
LANGUAGE JAVA
NAME 'SHA256.get_digest( java.lang.String ) return oracle.sql.RAW';
对于那些感兴趣的人,Oracle11g中 Bcrypt 的最终工作副本!