【问题标题】:Securely Encrypt And Store Password in CoreData在 CoreData 中安全加密和存储密码
【发布时间】:2015-01-19 01:38:56
【问题描述】:

我正在尝试使用可转换属性类型加密和解密核心数据中的用户密码。这是我的NSValueTransformer 子类:

@objc (PasswordTransformer) class PasswordTransformer: NSValueTransformer {
    override class func transformedValueClass() -> AnyClass {
        return NSData.self
    }

    override class func allowsReverseTransformation() -> Bool {
        return false
    }
    override func transformedValue(value: AnyObject?) -> AnyObject? {
        if let string = value as? String {
            let tuple = Utils.encryptString(string)
            let first = tuple.0 as NSData?
            if first != nil {
                return first!
            }
        }
        return nil
    }
}

我想要发生的是当我像这样设置用户的密码时:user.password = "somepassword",密码应该自动加密并使用我的Utils.encryptString() 函数返回为NSData(它建立在@之上987654326@)。然后,当我检索该属性的值时,它应该返回 NSData 对象。相反,我的转换器子类永远不会被调用,并且密码属性仍然是一个明文字符串,我绝对不想发送到我的服务器。

我在我的 CoreData 模型文件中指定了值转换器并注册为在我的 NSManagedObject 子类中转换的值,所以我知道这不是问题。当我将密码设置为字符串时,是否有任何原因不会自动转换?转换的值是否仅在保存到核心数据上下文时使用,而不是在有人尝试访问该属性时使用?

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    转换的值是否仅在保存到核心数据上下文时使用,而不是在有人尝试访问该属性时使用?

    没错。值转换器的目的是将内存中的对象转换为持久存储文件中的不同类型的对象。通常这意味着在加载数据时保存和反转过程时,Core Data 不会直接将某种对象转换为NSData。变形金刚不会影响对象的内存属性值。

    总之,

    • 值转换器仅在保存更改时工作
    • 不可逆的值转换器对 Core Data 属性没有意义。

    【讨论】:

    • 嗯,有道理。所以我真的应该把属性类型设置为二进制数据,然后自己在加密和未加密之间来回转换。
    • 如果你不想在内存中保存原始密码,那是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多