什么是Swift中加密密码的最佳方法?

7

我正在开发一个应用程序,可以输入登录凭据 (用户名和密码)。在将数据发送到服务器之前,我希望对其进行加密。我很想得到一些关于Swift中密码加密的最常用方法或最佳实践的见解。


你可以将其存储在钥匙串中 http://www.raywenderlich.com/92667/securing-ios-data-keychain-touch-id-1password - Dan Beaulieu
1
只需使用TLS https://developer.apple.com/library/mac/documentation/Security/Conceptual/cryptoservices/SecureNetworkCommunicationAPIs/SecureNetworkCommunicationAPIs.html - pvg
1
为什么你想要加密它?如果你想要将其存储在本地,你应该将其放入钥匙串中。如果你不想在服务器上存储明文,你可以对其进行哈希处理并存储哈希值。 - Surely
1
我认为这里缺少一些数据 - API希望你如何进行身份验证?API令牌?基本身份验证?摘要身份验证?在给出对你的问题有帮助的答案之前,我认为我们需要更多的信息。 - galois
2
通常的做法是通过安全通道将原始用户名和密码发送到服务器。如果您尝试从CommonCrypto或类似的东西重新创建安全传输,那么您很可能会犯一些错误,这些错误会完全破坏任何安全性。即使加密原语选择得很好,也可能存在攻击。重放攻击是其中之一,但还有其他攻击方式。最简单的方法是使用已经实现在各处的现有标准。您可以在将数据写入安全通道之前对其进行加密,但这并不会给您带来太多好处。 - Artjom B.
显示剩余8条评论
3个回答

1

2
实际上,如果您通过https发送数据,则会在客户端对其进行加密,并在服务器上进行解密。所有这些都是透明的,无需在代码中显式加密任何内容。 - Jacek Lampart
4
什么?当你的用户知道你正在以明文形式传输密码时,你的创业公司可能会在那一天死亡。失去的信任将永远无法挽回。 - John Smith
4
这是一个糟糕的回答。永远不要仅依赖于https加密来保护明文密码。一定要对用户密码进行加密。 - Brian Corbin
@BrianCorbin 你介意详细说明一下吗? - Jacek Lampart
1
同意两点。OP 询问的是将数据发送到服务器,而不是存储在客户端上(在这种情况下,正如许多人提到的那样,加密是必不可少的)。 - Jacek Lampart
显示剩余3条评论

0

0

==> 我们的 Objective-C 代码(使用 NSString 类别)可以直接转换为 Swift(使用 String 扩展)。

  extension String {

func sha1() -> String {
    let data = self.dataUsingEncoding(NSUTF8StringEncoding)!
    var digest = [UInt8](count:Int(CC_SHA1_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA1(data.bytes, CC_LONG(data.length), &digest)
    let output = NSMutableString(capacity: Int(CC_SHA1_DIGEST_LENGTH))
    for byte in digest {
        output.appendFormat("%02x", byte)
    }
    return output as String
}}println("Hello World".sha1())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接