NSValueTransformer 加密数据

Posted

技术标签:

【中文标题】NSValueTransformer 加密数据【英文标题】:NSValueTranformer to encrypt data 【发布时间】:2012-05-21 12:23:04 【问题描述】:

我想在 NSValueTransformer 的帮助下加密一些核心数据列。这个想法是,我使用可转换的数据类型并为我的数据类型定义一些转换器。在转换方法中,我想加密/解密该值。我定义了一个实际上什么都不做的转换器—​​—加密的东西目前还没有实现。

@implementation StringCryptoTransformer

+ (Class)transformedValueClass  return [NSString class]; 


+ (BOOL)allowsReverseTransformation  return YES; 


- (NSString*)transformedValue:(id)value 

    NSLog(@"Transformer: %@",value);

    if([value isKindOfClass:[NSString class]])
        return value;
    
    return nil;
     

- (NSString*)reverseTransformedValue:(id)value

    return value;

方法

- (NSString*)transformedValue:(id)value

使用有效值调用,但在获取对象时出现此错误:

* 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString 字节]: 无法识别的选择器发送到实例 0xf5859f0'

有什么想法吗?

编辑:

我意识到我必须转换为 NSData,反之亦然。现在它工作正常

- (id)transformedValue:(id)value 

    NSData *data =  [((NSString*)value) dataUsingEncoding:NSUTF8StringEncoding];
    return [CryptoUtils encryptWithKey:self.key data:data];



- (id)reverseTransformedValue:(id)value

    NSData *data = [CryptoUtils decryptWithKey:self.key data:value];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

【问题讨论】:

您应该将您的编辑添加为答案并接受它作为正确的答案,这样您的问题就不再显示为未回答。 【参考方案1】:

我意识到我必须转换为NSData,反之亦然。现在它工作正常

- (id)transformedValue:(id)value 

    NSData *data =  [((NSString*)value) dataUsingEncoding:NSUTF8StringEncoding];
    return [CryptoUtils encryptWithKey:self.key data:data];
    

- (id)reverseTransformedValue:(id)value

    NSData *data = [CryptoUtils decryptWithKey:self.key data:value];
    return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

【讨论】:

以上是关于NSValueTransformer 加密数据的主要内容,如果未能解决你的问题,请参考以下文章

从 NSValueTransformer 内部引用 NSManagedObject 实体

核心数据转换器

用于核心数据中 C 结构的 NSValueTransformer

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

在哪里为 Swift 中的核心数据实现 NSValueTransformer

核心数据:没有为实体 ZZZZ 上的属性 YYYY 找到类名为 XXX 的 NSValueTransformer