首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >objective-c (iOS)中的MD5散列,基于共享密钥

objective-c (iOS)中的MD5散列,基于共享密钥
EN

Stack Overflow用户
提问于 2012-02-11 08:26:44
回答 2查看 6.6K关注 0票数 1

我目前正在开发一个应用程序,它需要发送身份验证数据与它提供的API。基本上,它需要基于您想要发送的数据、基于共享密钥来生成散列。

问题是,虽然我已经能够追踪到将执行MD5散列的函数,但它们不是基于键的,这是绝对关键的。

在iOS平台的objective-c中有什么方法可以做到这一点吗?

该API通常与PHP一起使用,PHP提供类似以下方便的函数:

代码语言:javascript
复制
$key = hash_hmac('md5', $postdata , $sharedkey);

在objective-c中是否有机会实现相等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-11 10:10:51

MD5算法只使用一个字符串作为输入。约定是将键(也称为"salt“值)附加到要散列的字符串。我猜测PHP键的MD5函数有第二个参数来简化操作,但是如果您这样做,应该会得到相同的结果:

代码语言:javascript
复制
NSString *value = [data stringByAppendingString:key];
NSString *hashed = MD5HASH(value); //pseudocode

更新:

好的,我检查了Wikipedia,看起来你需要做一些额外的工作来实现HMAC风格的散列。所以你有两个选择。

  1. 在您已经使用的MD5散列之上实现HMAC算法(看起来并不太难--我已经粘贴了下面的伪代码)。
  2. 不用担心HMAC -只需在两端使用常规的MD5通过连接消息和密钥来生成散列-这应该是非常安全的,这是大多数人所做的。

HMAC算法

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2012-02-11 09:04:47

通常,您只需将键附加到要散列的字节上。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9236664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档