NSUserDefaults-SevenSecurityLayers icon indicating copy to clipboard operation
NSUserDefaults-SevenSecurityLayers copied to clipboard

Secure your NSUserDefaults just by one line of code. Simple usage / strong encryption protection / maximum productivity

NSUserDefaults+SevenSecurityLayers.h (Obsoleted, this is no longer maintained)

  • A category which provides an encryption layer for NSUserDefaults to securely save data .
  • Using strong AES 356-bit encryption

####Benefit:

* Secure user data just by one line of code.
* Support obfuscating your key in binary source
* Able to save data without encryption
* Enable to handle exceptional case via built-in NOTIFICATION
* Enable using standardUserDefaults as well as securedUserDefaults parallelly

Make donation for Hai Kieu's github


How to use

Note: Remember to install dependency first

  • CocoaSecurity 1.2.4 (https://github.com/kelp404/CocoaSecurity)

In the implementation file, import NSUserDefaults+SevenSecurityLayers.h

#import "NSUserDefaults+SevenSecurityLayers.h"

Initialize a secured UserDefaults with a secret key.


//Recommend: Should put the secret key in implementation file to secure your key.
//Warning: Must specify the secret key before using or you get **Exception**

NSUserDefault *pref = [[NSUserDefault securedUserDefaults] setSecretKey:@"Your secret key"];

// >>> DONE! That's it, a secured storage has been created already for you to save any data later. <<<


//Demonstrate saving data

[pref setBool:YES forKey:@"DataIsSecured"];
[pref setString:@"AES 356-bit" forKey:@"KindOfEncryption"];
[pref setString:@"v1.2.0 available" forKey:@"ObfuscateSecretKey"];
[pref setString:@"Able to save data without encryption" forKey:@"KeepOrigin"];
...
[pref synchronize];


//Demonstrate retrieving data

bool yourBool = [pref boolForKey:@"DataIsSecured"];
NSString * yourString = [pref stringForKey:@"KindOfEncrytion"];
...

###Advanced usage

  • v1.2.0 available

  • Obfuscate your secret key

    Shouldn't use this ~~NSString * theSecretKey = @"putYourKeyHere";~~

    Try this way :point_right: NSString * theSecretKey = @"".p.u.t.Y.o.u.r.K.e.y.H.e.r.e;

  • Store data without encryption

    `[pref setObject:@"yourValue" forKey:@"yourKey.nonSecured"];`
    
    Or
    
    `[pref setObject:@"yourValue" forKey:@"yourKey".nonSecured];`
    
  • Migrate data to secured storage

    `[NSUserDefaults migrate:[NSUserDefaults standardUserDefaults] to:pref clearSource:YES];`
    

Supported NOTIFICATION Events

  • NOTIFICATION_CANNOT_RETRIEVE_ENCRYPTED_DATA
  • NOTIFICATION_CANNOT_STORE_ENCRYPTED_DATA
  • ~~NOTIFICATION_SECRET_KEY_NOT_SET~~
  • ~~NOTIFICATION_STORED_DATA_HAS_BEEN_VIOLATED~~

Supported Encryption Types

Seven Security Layers Solution supports the following property types:

  • NSInteger
  • NSString
  • NSArray
  • string+array
  • NSDictionary
  • NSURL
  • NSData
  • BOOL
  • float
  • double

Contact

Email: [email protected]

Make donation for Hai Kieu's github

###Thanks to

  • https://github.com/nielsmouthaan/SecureNSUserDefaults
  • https://github.com/UrbanApps/UAObfuscatedString

MIT License

###Dependencies

  • CocoaSecurity 1.2.4 (https://github.com/kelp404/CocoaSecurity)

###Dependencies Installation

  1. git:
$ git clone git://github.com/kelp404/CocoaSecurity.git
$ cd CocoaSecurity
$ git submodule update --init
  1. CocoadPods:
    add Podfile in your project path
platform :ios
pod 'CocoaSecurity'
$ pod install