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