NSValueTranformer来加密数据 [英] NSValueTranformer to encrypt data

查看:200
本文介绍了NSValueTranformer来加密数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to encrypt some core-data columns with help of an NSValueTransformer. The idea is, that I use data-type transformable and define some transformer for my datatypes. Inside the transformation-methods I want to encrypt/ decrypt the value. I defined a transformer that does actually nothing - the crypto-stuff is currently not implemented.

@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

获取调用的有效值,但是当获取对象时,我得到这个错误:

gets called with a valid value but when fetching objects I get this error:


* exception'NSInvalidArgumentException',reason:' - [__ NSCFString bytes]:
unrecognized selector sent to instance 0xf5859f0'

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0xf5859f0'

有什么问题?

编辑:

到NSData,反之亦然。现在工作正常

I realized that I have to convert to NSData and vice versa. Now It works fine

- (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];
}


推荐答案

转换为 NSData ,反之亦然。现在工作正常

I realized that I have to convert to NSData and vice versa. Now It works fine

- (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];
}

这篇关于NSValueTranformer来加密数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆