【问题标题】:MD5 Hashing in objective-c (iOS), based on a shared keyObjective-c (iOS) 中的 MD5 散列,基于共享密钥
【发布时间】:2012-02-11 00:26:43
【问题描述】:

我目前正在开发一个应用程序,该应用程序需要将身份验证数据与它一起发送到提供的 API。基本上它需要根据您要发送的数据,基于共享密钥生成哈希。

问题在于,虽然我已经能够追踪到会进行 MD5 散列的函数,但它们不是基于密钥的,这绝对是至关重要的。

有什么方法可以在 iOS 平台的 Objective-c 中完成吗?

API 通常与 PHP 一起使用,它提供了类似这样方便的功能:

$key = hash_hmac('md5', $postdata , $sharedkey);

有没有机会在objective-c中实现equal?

【问题讨论】:

  • 检查这个forum out
  • hmmm 是的,他们提到了函数 CC_MD5([self bytes],[self length],digest) 的使用,这就是我现在正在使用的。但是好像不能基于key作为参数生成?
  • 关于 SO 有很多 hmac 问题,其中几个包括来源:stackoverflow.com/…

标签: objective-c ios encryption hash md5


【解决方案1】:

MD5 算法只使用一个字符串作为输入。惯例是您将您的密钥(也称为“盐”值)附加到您正在散列的字符串中。我的猜测是 PHP MD5 函数有第二个参数作为 key 让生活更轻松,但如果你这样做,你应该得到相同的结果:

NSString *value = [data stringByAppendingString:key];
NSString *hashed = MD5HASH(value); //pseudocode

更新:

好的,我检查了Wikipedia,看起来您需要做一些额外的工作来实现 HMAC 样式的哈希。所以你有两个选择。

  1. 在您已经在使用的 MD5 哈希之上实现 HMAC 算法(看起来不太难 - 我在下面粘贴了伪代码)。

  2. 不用担心 HMAC - 只需使用常规 MD5 通过连接消息和密钥在两端生成哈希 - 这应该非常安全,这是大多数人所做的。

    李>

HMAC算法

function hmac (key, message)
    if (length(key) > blocksize) then
        key = hash(key) // keys longer than blocksize are shortened
    end if
    if (length(key) < blocksize) then
        key = key ∥ [0x00 * (blocksize - length(key))] // keys shorter than blocksize are zero-padded ('∥' is concatenation) 
    end if

    o_key_pad = [0x5c * blocksize] ⊕ key // Where blocksize is that of the underlying hash function
    i_key_pad = [0x36 * blocksize] ⊕ key // Where ⊕ is exclusive or (XOR)

    return hash(o_key_pad ∥ hash(i_key_pad ∥ message)) // Where '∥' is concatenation
end function

【讨论】:

  • 非常感谢您的回答 :) 最后我们选择了第二个选项,但没有使用 HMAC,而是简单地使用常规 MD5 生成哈希 :)
【解决方案2】:

通常您只需将密钥附加到您正在散列的字节。

因此,如果共享密钥是“12345”并且您传递的是 username=jsd 和 password=test,那么您将构建类似“username=jsd&password=test&secret=12345”的字符串。然后接收端会根据用户名密码+秘钥构造自己的版本,运行相同的md5,接收相同的值。

【讨论】:

  • 我也是这么想的,结果发现HMAC的东西要复杂一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 2015-04-26
  • 2019-03-29
  • 2017-05-28
  • 2014-09-09
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多