Simple AES, RSA encryption / decryption and Hash(MD5, HmacMD5, SHA1__SHA512, HmacSHA1__HmacSHA512) for iOS and OS X.
- iOS 4.0 or later
- Xcode 7.3 or later
- libz
1.You should copy below files to your projects:
NSData+Encrypt.hNSData+Encrypt.mNSString+Encrypt.hNSString+Encrypt.mRSA.hRSA.m
2.Add under lines to your class:
#import "NSData+Encrypt.h" #import "NSString+Encrypt.h" #import "RSA.h"
All source code is licensed under the MIT License.
NSString *string = @"Do any additional setup after loading the view, typically from a nib."; NSLog(@"md2: %@", [string md2String]); NSLog(@"md4: %@", [string md4String]); NSLog(@"md5: %@", [string md5String]); NSLog(@"md516: %@", [string md5HexDigest16]); NSLog(@"sha1: %@", [string sha1String]); NSLog(@"sha224: %@", [string sha224String]); NSLog(@"sha256: %@", [string sha256String]); NSLog(@"sha384: %@", [string sha384String]); NSLog(@"sha512: %@", [string sha512String]); NSLog(@"hmacMD5: %@", [string hmacMD5StringWithKey:@"key"]); NSLog(@"hmacSHA1: %@", [string hmacSHA1StringWithKey:@"key"]); NSLog(@"hmacSHA224: %@", [string hmacSHA224StringWithKey:@"key"]); NSLog(@"hmacSHA256: %@", [string hmacSHA256StringWithKey:@"key"]); NSLog(@"hmacSHA384: %@", [string hmacSHA384StringWithKey:@"key"]); NSLog(@"hmacSHA512: %@", [string hmacSHA512StringWithKey:@"key"]);
[string crc32String];md2: b46270495c8196bbd8b8a4fd6e8a2d51 md4: f946d62ce4c188394f5eaf70e82263ab md5: b0c65c1d384ef67d48e8a33a5487f6eb md516: 384ef67d48e8a33a sha1: 3cde1b400a9e7087a4e3a653c289e548e8fd23cc sha224: 93517a39808d1ea1aac8da1de51b5ee3e20ee19c513fa939fa855718 sha256: 39d17b191f1e823e1931f308e41e864788323e510f29f8e747cdb75c9dd3ed89 sha384: 6a9af1b29ff994abc53e23f34660b910b43935a187f0079631f83cb04941eaf296271be6787f76affe23f12f29ad1aea sha512: b5d963070647fbbb7188f156ca6f61051cc81caaf1cfb6292bd96fb42354cd1209816893302694ebeb5a3720a6d5dad837143cf4ccc5f7334622c2938e6bc700 hmacMD5: 447efbc0731643768648101661140df9 hmacSHA1: 3b1e1d77c14a1f79ed65fdd049a40ee9a3ad83c9 hmacSHA224: ea00c96da20bb216847583b2c7741258399a77fa2707494ce54628c7 hmacSHA256: e99e794409cd03eb961f894c91d9e6fc0aea3877bf4a71998d37f838d0a2daaa hmacSHA384: ffb7f3ddb5fa0f99a079168aa8c1d03550253b5eaa86b09652bf2ce03e096458c384e77fd4969e99f4224b107bfe5638 hmacSHA512: e3c3dff4aee160163c896f2d6fbddaa3e85d35ee3aaafe6eaf2464e0f09a0acf553353d1df2740093a86a11483dadbe4e26634c93f646ef6bc19584489f4c094 crc32String: bb726d40
- Encrypt
/** Returns an encrypted NSData using an algorithm. @param algorithm An algorithm(AES, DES ...). @param key A key length of 16, 24 or 32 (128, 192 or 256bits). NSData or NSString. @param iv An initialization vector length of 16(128bits). Pass nil when you don't want to use iv. NSData or NSString. @return An NSData encrypted, or nil if an error occurs. */ - (nullable NSData *)dataEncryptedUsingAlgorithm:(CCAlgorithm)algorithm key:(id)key initializationVector:(nullable id)iv options:(CCOptions)options error:(CCCryptorStatus *)error;
- Decrypt
/** Returns an encrypted NSData using an algorithm. @param algorithm An algorithm(AES, DES ...). @param key A key length of 16, 24 or 32 (128, 192 or 256bits). NSData or NSString. @param iv An initialization vector length of 16(128bits). Pass nil when you don't want to use iv. NSData or NSString. @return An NSData encrypted, or nil if an error occurs. */ - (nullable NSData *)dataEncryptedUsingAlgorithm:(CCAlgorithm)algorithm key:(id)key initializationVector:(nullable id)iv options:(CCOptions)options error:(CCCryptorStatus *)error;
NSString *string = @"Do any additional setup after loading the view, typically from a nib."; encodeString = [string DESEncryptedDataUsingKey:@"12345678" iv:nil error:nil]; NSLog(@"%@", encodeString); NSLog(@"%@", [encodeString DESDecryptedDataUsingKey:@"12345678" iv:nil error:nil]);
encodeString:670c1a49f0b76cad672226374722ded2237af9040af48c858680fd7f69dcfafa35e8bf71f450160e7f57ba77b3880c10b093f59ac175f9293fc16d1e4d353e33fd280b8d0b508692 decodeString:Do any additional setup after loading the view, typically from a nib.
/* key: enum { kCCKeySizeAES128 = 16, kCCKeySizeAES192 = 24, kCCKeySizeAES256 = 32, kCCKeySizeDES = 8, kCCKeySize3DES = 24, kCCKeySizeMinCAST = 5, kCCKeySizeMaxCAST = 16, kCCKeySizeMinRC4 = 1, kCCKeySizeMaxRC4 = 512, kCCKeySizeMinRC2 = 1, kCCKeySizeMaxRC2 = 128, kCCKeySizeMinBlowfish = 8, kCCKeySizeMaxBlowfish = 56, }; iv: enum { kCCBlockSizeAES128 = 16, kCCBlockSizeDES = 8, kCCBlockSize3DES = 8, kCCBlockSizeCAST = 8, kCCBlockSizeRC2 = 8, kCCBlockSizeBlowfish = 8, }; */
length of iv is 8
encodeString = [string DESEncryptedDataUsingKey:@"12345678" iv:@"12345678" error:nil]; NSLog(@"%@", encodeString); NSLog(@"%@", [encodeString DESDecryptedDataUsingKey:@"12345678" iv:@"12345678" error:nil]);
encodeString:468ccd80798f771322fd4592228bdb07696bb6510861ee77ae871304bfffa35f9ad43e312da68247ef2e0f9006046274d8bf367b4f8a79893e692692814798e36adacc3f45d73a2e decodeString:Do any additional setup after loading the view, typically from a nib.
length of iv is 9
encodeString = [string DESEncryptedDataUsingKey:@"12345678" iv:@"123456789" error:nil]; NSLog(@"%@", encodeString); NSLog(@"%@", [encodeString DESDecryptedDataUsingKey:@"12345678" iv:@"123456789" error:nil]);
encodeString:468ccd80798f771322fd4592228bdb07696bb6510861ee77ae871304bfffa35f9ad43e312da68247ef2e0f9006046274d8bf367b4f8a79893e692692814798e36adacc3f45d73a2e decodeString:Do any additional setup after loading the view, typically from a nib.
/** Decompress data from gzip data. @return Inflated data. */ - (nullable NSData *)gzipInflate; /** Comperss data to gzip in default compresssion level. @return Deflated data. */ - (nullable NSData *)gzipDeflate; /** Decompress data from zlib-compressed data. @return Inflated data. */ - (nullable NSData *)zlibInflate; /** Comperss data to zlib-compressed in default compresssion level. @return Deflated data. */ - (nullable NSData *)zlibDeflate;
NSString* file = [[NSBundle mainBundle] pathForResource:@"rsa_private_key" ofType:@"pem"]; self.privateKeyPem = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:nil]; file = [[NSBundle mainBundle] pathForResource:@"rsa_public_key" ofType:@"pem"]; self.publicKeyPem = [NSString stringWithContentsOfFile:file encoding:NSUTF8StringEncoding error:nil]; file = [[NSBundle mainBundle] pathForResource:@"rsa_public_key" ofType:@"der"]; self.publicKeyDer = [NSData dataWithContentsOfFile:file]; NSError *error = nil; encodeString = [RSA encryptString:string publicPemKey:self.publicKeyPem error:&error]; NSLog(@"%@", encodeString); NSString *decodeString = [RSA decryptString:encodeString privatePemKey:self.privateKeyPem error:nil]; NSLog(@"%@", decodeString); encodeString = [RSA encryptString:string publicDer:self.publicKeyDer error:nil]; NSLog(@"%@", encodeString); decodeString = [RSA decryptString:encodeString privatePemKey:self.privateKeyPem error:nil]; NSLog(@"%@", decodeString);
// pem encodeString:T1tW5f9wUcbHXap7fTgSuT5HGZKBxq+N6Hypula4puWrW2FV1/rDG81TdWIF+eDOYL3YaEsYIIZ9Q9ZqrNDt6lwMrylyQLJoCVmHIIkxagYAwUTBz7tGKWV3mUXMD28hSIgoAmkUKCbmwwUp5fdFB4vzGuK3p0DuZ2njdIR1ApDQ3SlUXrFqAS4fWUd5bETF8bvwhFmVL+PwjNsii06ITPlQsa7ozoQR6U1Wfmp4cy9As9ir0qihQT1/XrKuyDOVYrXcgYGNlKGWxe/SLSuMjGZXBhArmLy/R29QmDLe9CkTBthP6Z1HqW3WRZKCgd7lDAhgZgGwYuGzOX1QdSC9Cg== decodeString:Do any additional setup after loading the view, typically from a nib. // der encodeString:Xx3U3aKjJYgy69eav5QTPuK5skfdlGIGcT74MgxHxKQUM5K0WSotD0N5Um3qybohpQya8iQrxHoWA74/EPt4P2yCjxxohmd5OIBkvTCwXIx84qUafrmyYwG2mM9lL1V/4orN7/vi7OdnFIDSWafhLq54icbF0q6ejEx8ajWw+YdZAc0UvzD+KYiUPrM1hr4cwrwdKbNzcw2zSWUku61KwxHpr4aewFXqmSSGFwlKtU2VExkE6H1tcOow3Gm0t8vch7hnTZR8GFYBhMqJYwtbNxD687di7hCDAgpLA+wtYJJKoB4i7wh9NMzRAEd4N6lOpQRRnTwUqG9YQ35QZ1P6LQ== decodeString:Do any additional setup after loading the view, typically from a nib.