2

我正在尝试使用 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 的最终工作副本!

4

1 回答 1

0

我们面临同样的问题。
最后,我们使用原生 Java 函数在 Oracle 内部实现了 BCrypt 算法。我在github
上发布了源代码

于 2021-05-30T20:27:05.060 回答