2011-09-26 133 views
1

有人问我是否可以通过一个小型项目帮助他们。在我遇到SHA-1加密之前,一切都很完美。我一直在研究它几天,但无法找到解决这个问题的方法。使用SHA1散列加密NSString

目标是加密NSString,将其发送到远程PHP脚本并从服务器接收回答。我管理发送和接收部分,但不知道'硬性部分'

该字符串需要在客户端进行编码,需要在接收端进行检查,所以需要在那里解码(不是我的问题)。是否有可能实现这个目标,如果接收端知道它的去加密算法,SHA-1哈希值是否可以解码?

+5

[SHA-1](http://en.wikipedia.org/wiki/SHA-1)不是加密,它是一个散列。你不能“解密”它,因为它首先没有加密。它基本上只是一个校验和,它不包含信息。 – rid

+0

如果连接使用https,这不够吗?否则,xcode的文档具有CryptoExercise,它不会在模拟器中运行,只能在设备上运行。 –

回答

1

如果接收方知道字符串应该是(例如密码),那么您可以SHA1在发送方上散列密码,将其发送给接收方,接收方可以根据本地计算的SHA1散列已知的密码。

但是,这种方法也有问题,你可能不应该自己发明密码协议。或者,如果您传递了服务器尚不知道的一些信息,那么您将需要一种完全不同的方法。

2

SHA为其处理的数据创建了一个不可逆的签名,它不是本身的加密,而是哈希(安全哈希算法)。

它可以用作认证协议的一部分。如果双方都有一个共同的价值观并且想忍受它们都具有相同的价值,但不想发送价值(可以通过咨询看出),那么可以使用散列。发起者散列(SHA-1)共享值,将散列发送到另一侧。接收器散列它们的共享值副本并比较散列值。

有很多方法可以实现,比如只共享散列值,@Greg提到了这个方法。更重要的是,@Greg提到,不应该重新设计安全方法。我会补充说,如果安全性很重要,请获得经过验证的安全专家的帮助。当我开发一个安全的产品时,我总是会审查它。

+0

感谢分配,你的回答为我清除了一切。 –