Форум программистов, компьютерный форум CyberForum.ru

Безопасность платного приложения - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C CoreData http://www.cyberforum.ru/objective-c/thread924468.html
Добрый день! У меня пара вопросов по CoreData. 1) Я правильно понимаю, что в атрибутах сущности должны находится объекты, которые не имеют подобъектов, а в отношениях должны находится объекты, которые имеют подобъекты? Если у объекта нет свойств, он не может быть сущностью? 2) Бывают ли случаи, когда связи между 2-мя объектами неинверсные? Если да, то как часто? И можно пару примеров? Я в...
Objective-C в чем отличия? Всем доброго времени суток. У меня вопросик возник пока изучаю Obj C в чем отличие такой записи от alert.show? Заранее спасибо за ответы http://www.cyberforum.ru/objective-c/thread923224.html
Objective-C Проблемы с контроллерами
ViewController.h: #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property int a; @end;
ObjectiveC предикаты, упрощенный метод Objective-C
Предикаты в Obj C, как известно, используются там, где нужно фильтровать или найти, сравнить данные Остановимся на наиболее распространненых случаях использования предикатов - фильтр строкового массива - сравнение строк заглянем в документацию http://macbug.ru/cocoa/predformat#.URul8OjoRGM
Objective-C Открыт ли сайт в safari http://www.cyberforum.ru/objective-c/thread919445.html
Добрый день! Можно ли узнать, открыт ли данный сайт в safari (mac os)? Если да, то как?
Objective-C Фейсбук Всем добрый вечер! Я в первый раз работаю с фейсбуком, у меня такой вопрос. Мне нужно проверить, поставил ли пользователь лайк. Нашел такое решение http://stackoverflow.com/questions/10868039/how-to-check-if-a-user-likes-a-page. Как я понимаю, мне нужен класс Facebook.h и Facebook.m. Я скачал FacebookSDK, но там такого класса нет. Где его можно найти? Или можно обойтись без него? подробнее

Показать сообщение отдельно
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
26.07.2013, 13:29  [ТС]
короче, так как записи данных не избежать, то можно применить AES шифрование словаря

файлы
NSData-AES.h

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//
//  NSData-AES.h
//  Encryption
//
//  Created by Jeff LaMarche on 2/12/09.
//  Copyright 2009 Jeff LaMarche Consulting. All rights reserved.
//
 
#import <Foundation/Foundation.h>
 
@interface NSData(AES)
- (NSData*)AES256EncryptWithKey:(NSString*)key;
 
- (NSData*)AES256DecryptWithKey:(NSString*)key;
@end
NSData-AES.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
//
//  NSData-AES.m
//  Encryption
//
//  Created by Jeff LaMarche on 2/12/09.
//  Copyright 2009 Jeff LaMarche Consulting. All rights reserved.
//
 
#import "NSData-AES.h"
#import <CommonCrypto/CommonCryptor.h>
 
@implementation NSData(AES)
 
 
- (NSData*)AES256EncryptWithKey:(NSString*)key {
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
    
    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [self length];
    
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    
    size_t numBytesEncrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess)
    {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    
    free(buffer); //free the buffer;
    return nil;
}
 
- (NSData*)AES256DecryptWithKey:(NSString*)key {
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
    
    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
    
    NSUInteger dataLength = [self length];
    
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize           = dataLength + kCCBlockSizeAES128;
    void* buffer                = malloc(bufferSize);
    
    size_t numBytesDecrypted    = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES256,
                                          NULL /* initialization vector (optional) */,
                                          [self bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesDecrypted);
    
    if (cryptStatus == kCCSuccess)
    {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }
    
    free(buffer); //free the buffer;
    return nil;
}
 
@end
использование через впомогательные функции распаковки

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma mark WriteRead Dict Secur
 
-(NSMutableDictionary *)readDictionaryFromFile:(NSString *)path withSecurKey:(NSString *)key {
    NSData*d = [NSData dataWithContentsOfFile:path];
    if (d) {
        d = [d AES256DecryptWithKey:key];
        if (d) {
            NSDictionary *dict = [NSKeyedUnarchiver unarchiveObjectWithData:d];
            if (dict) {
                 // полное мутирование словаря
                 NSMutableDictionary* mudict = CFBridgingRelease(CFPropertyListCreateDeepCopy(kCFAllocatorDefault, (__bridge CFPropertyListRef)(dict), kCFPropertyListMutableContainers));
                return mudict;
            }
        }
    }
    return [NSMutableDictionary new];
}
 
-(bool)writeDictionary:(NSDictionary *)dict toFile:(NSString *)path withSecurKey:(NSString *)key {
    NSData*dt = [NSKeyedArchiver archivedDataWithRootObject:dict];
    dt = [dt AES256EncryptWithKey:key];
    return [dt writeToFile:path atomically:YES];
}
пример кода

Objective-C
1
2
3
4
// << чтение
NSMutableDictionary *dict = [self readDictionaryFromFile:@"Путь к файлу" withSecurKey:@"ключ шифрования"];
// << запись
[self writeDictionary:dict toFile:@"Путь к файлу" withSecurKey:@"ключ шифрования"];
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru