【问题标题】:Hash values not matching (possibly encoding-related?)哈希值不匹配(可能与编码有关?)
【发布时间】:2010-08-19 10:07:13
【问题描述】:

我正在从我的前端 (Flex) 向后端 (Oracle) 发送一个值以及该值的哈希值。

在我的前端,我使用 Google Code 中的 as3corelib 库来使用 SHA1 算法计算 HMAC 哈希值:

com.adobe.crypto.HMAC.hash(mySecret, myMessage, com.adobe.crypto.SHA1);

在后端,我使用的是 Oracle 的 DBMS_CRYPTO 包:

    dbms_crypto.mac(utl_raw.cast_to_raw(myMessage), dbms_crypto.hmac_sh1, 
utl_raw.cast_to_raw(mySecret));

这两个值通常匹配。但我遇到了一个他们没有的例子。我检查了有什么不同,发现前端以某种方式在消息末尾添加了时髦的 Â 字符(在后端数据中看不到)。

我猜它与编码有关。下面是adobe函数的源码:

        public static function hash( secret:String, 
message:String, algorithm:Object = null ):String
        {
            var text:ByteArray = new ByteArray();
            var k_secret:ByteArray = new ByteArray();

            text.writeUTFBytes(message);
            k_secret.writeUTFBytes(secret);

            return hashBytes(k_secret, text, algorithm);
        }

由于正文已加密,我不知道如何检查 Oracle 的哈希。

那么,任何想法为什么我的哈希值与这个字符不匹配? (我知道数据甚至不应该有额外的 Â 字符,它可能是换行符或其他东西,但无论我收到什么数据,我的散列必须有效,否则它是不可靠的)。我怀疑它与编码有关,但我不知道我能做些什么不同。

请帮助,朋友们。

编辑:我的数据库使用 AL32UTF8。我不确定 Flex 前端使用什么编码。 Flex 前端包中的散列函数看起来像是需要 UTF 编码的文本,但这是否意味着它实际上是 UTF?是否依赖oracle httpservice为前端提供数据?

【问题讨论】:

    标签: apache-flex oracle security actionscript cryptography


    【解决方案1】:

    您的字符串编码可能有问题。在前端,您将字符串显式转换为 UTF-8 字节表示。在后端,它取决于不同的会话和数据库设置,这不能从您的问题中得出。

    所以可能的解决方案是:

    dbms_crypto.mac(
      utl_raw.convert(utl_raw.cast_to_raw(myMessage), 'WE8ISO8859P1', 'UTF8'),
      dbms_crypto.hmac_sh1, 
      utl_raw.cast_to_raw(mySecret)
    );
    

    不要使用WE8ISO8859P1,而是使用与字符集相关的数据库或会话设置。

    【讨论】:

    • +1 感谢您的提示!我将与我们的 DBA 核实并返回。
    • 它似乎不起作用。我收到消息“PL/SQL:数字或值错误”。我使用 select utl_raw.convert(utl_raw.cast_to_raw('myData'), 'AL32UTF8', 'UTF8') from dual;
    【解决方案2】:

    终于解决了。 Oracle 应用服务器和存储数据的数据库的 nls lang 设置不同。

    感谢 Codo 带领我朝着正确的方向前进。

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 2015-04-05
      • 1970-01-01
      • 2013-08-20
      • 2014-05-19
      • 2021-04-23
      相关资源
      最近更新 更多