目标C - Salt / MD5哈希?

时间:2012-01-09 14:01:31

标签: objective-c xcode md5

我正在创建一个需要身份验证的应用,我已经在XCode中使用了登录视图。我正在使用的方法当前构建了我提交给我的服务器的URL,但是它在普通测试中提交了登录名和密码,如下所示:

http://myurl.com/auth.php?email=email@domain.com&password=mypassword

我确实收到了一些模糊的建议,他们使用了“盐和哈希40字符令牌”,但却未能看到这是怎么做的。我可以在服务器端执行一些操作来操作数据,但是需要能够对我在xcode中执行的任何操作进行解除盐/解散。

有没有办法让Objective C提供所提供密码的MD5哈希值,以便在我提交url请求之前,URL请求中的文本已经加密?我可以在服务器端PHP验证所提供的MD5哈希与数据库的MD5哈希匹配,以便在可能的情况下完美。

如果没有,那么我需要为Objective C中创建的这个salt / hash创建一个方法,这个方法必须是我可以在PHP中解开的,以便与我的数据库进行比较。

提前致谢。

Silver Tiger

更新:2012年1月14日

不幸的是,虽然我可以提出建议,但服务器和SSL选项并不在我的控制之下。我将不得不进一步研究SHA1和/或base64,以便我可以在应用程序中创建哈希并在服务器上重新创建/比较它。在获得SSL之前,任何指向正确阅读的指针都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

您可以使用OpenSSL C functions。然后,您需要将输出转换为可以在URL中编码的内容。虽然您可以将输出转换为十六进制,但通常使用base64。

注意,如果您可以控制连接的两端,请注意MD5不再被视为加密安全。您可能想要考虑其中一个SHA系列哈希值。

答案 1 :(得分:0)

无需“能够对我在xcode中执行的操作进行解除盐分/解除散列”。 这不是密码学的工作原理。

只需将输入文本的哈希值与预期文本的哈希值进行比较。

服务器可能会为您提供登录+密码的哈希版本 只需在Xcode中计算您输入的登录名+密码的哈希值,然后比较两个结果。

if ([response_of_server_containing_sha1_of_password equalsToString:[self sha1OfString:password_string_entered_by_user]]) ...

或者更可能这种比较是在服务器端完成的,这意味着您可能会将sha1(password_entered_by_user)发送到服务器,并将它们与存储在数据库中的密码的SHA1进行比较。

无论如何,不​​需要在这里进行双向加密,也不需要解密(“解密”/“解除散列”)任何内容。

你显然需要从实现身份验证服务器服务器端的人那里得到更多信息,如果他们没有提供所有需要的信息,那么他们希望你发送的哈希(md5?sha1?)等等

(注意,无论如何,以这种方式进行身份验证不会保护网站免受MITM等安全漏洞或重放攻击。如果您需要更高的安全性,请考虑使用SSL / HTTPS)