【发布时间】: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