在CoreData中安全加密和存储密码

时间:2015-01-19 01:38:56

标签: ios swift core-data

我尝试使用可转换的属性类型加密和解密核心数据中的用户密码。这是我的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",密码应自动加密,并使用我的NSData功能({1}}返回Utils.encryptString()建立在RNEncryptor之上。然后,当我检索该属性的值时,它应该返回NSData对象。相反,我的变换器子类永远不会被调用,密码属性仍然是一个明文字符串,我绝对不想发送到我的服务器。

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

1 个答案:

答案 0 :(得分:0)

  

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

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

简而言之,

  • 值变换器仅在保存更改时有效
  • 使用Core Data属性,不可逆值变换器没有意义。
相关问题