【问题标题】:BCrypt implementation in OracleOracle 中的 BCrypt 实现
【发布时间】:2014-06-16 07:27:22
【问题描述】:

我正在尝试在 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';

对于那些感兴趣的人,Bcrypt 的最终工作副本在Oracle11g

【问题讨论】:

  • 我认为您不想使用 SHA 加密密码是对的 - 也许从这里开始:stackoverflow.com/a/11087219/103295
  • 您好 Jeffrey,但我已经浏览了链接,如果我是正确的,解决方案指的是 dbms_crypto。不幸的是,Oracle 11g 仅支持 SHA1,这就是为什么我试图在 Java SP 模型 - BCrypt 中做到这一点。
  • 是的,这不是您问题的完整解决方案。那是我能找到的最接近的——也就是说,基本上你现在最好的选择是使用已建立的(受信任的)Java 实现并将其包装在 PL/SQL 函数中(就像你对 SHA256 实现所做的那样)。除了出于游戏/测试目的之外,我会谨慎尝试在 PL/SQL 中构建一个简单的实现。
  • 确实是这样。好吧,让我尝试使用现有的 Java 实现并构建一个 PL/SQL 函数。将返回结果。同时,如果有人已经这样做了,请回复。
  • 我确实设法使用 Java 存储过程实现了 BCrypt。但是使用 Java 存储过程是否安全,或者换句话说,它是一种标准做法。

标签: oracle encryption oracle11g bcrypt java-stored-procedures


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2010-10-26
    • 2014-11-20
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2014-10-12
    相关资源
    最近更新 更多