iOS开发 --- 加密加盐(AES|CBC|PKCS7)

加密模式:CBC

填充(CCOptions):kCCOptionPKCS7Padding

偏移量:iv

一,未加盐

1.1客户端iOS

//通用加密方法
+ (NSString *)encryptString:(NSString *)plainSourceStringToEncrypt key:(NSString *)key;
//通用解密方法
+ (NSString *)decryptString:(NSString *)base64StringToDecrypt key:(NSString *)key;

加密方法实现:

+ (NSString *)encryptString:(NSString *)plainSourceStringToEncrypt key:(NSString *)key{NSData *_secretData = [plainSourceStringToEncrypt dataUsingEncoding:NSUTF8StringEncoding];// You can use md5 to make sure key is 16 bits longNSData *encryptedData = [self doCipher:_secretData context:kCCEncrypt key:key];return [encryptedData base64EncodingWithLineLength:0];}

解密方法方法实现:

//通用解密方法
+ (NSString *)decryptString:(NSString *)base64StringToDecrypt key:(NSString *)key{NSData *data = [self doCipher:[NSData dataWithBase64EncodedString:base64StringToDecrypt] context:kCCDecrypt key:key];return [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
}
+  (NSData *)doCipher:(NSData *)plainText context:(CCOperation)encryptOrDecrypt key:(NSString *)key{NSData *aSymmetricKey = [key dataUsingEncoding:NSUTF8StringEncoding];CCCryptorStatus ccStatus   = kCCSuccess;size_t          cryptBytes = 0;    // Number of bytes moved to buffer.NSMutableData  *dataOut    = [NSMutableData dataWithLength:plainText.length + 32];ccStatus = CCCrypt( encryptOrDecrypt,kCCAlgorithmAES128,kCCOptionPKCS7Padding,(const void *)[aSymmetricKey bytes],32,ivBuff,plainText.bytes,plainText.length,dataOut.mutableBytes,dataOut.length,&cryptBytes);if (ccStatus != kCCSuccess) {NSLog(@"CCCrypt status: %d", ccStatus);}dataOut.length = cryptBytes;return dataOut;
}

1.2 服务端

public static string Encrypt(string p_Content, string p_Key){return Encrypt(PaddingMode.PKCS7, CipherMode.CBC, p_Content, p_Key);}
public static string Encrypt(PaddingMode p_PMode, CipherMode p_CMode, string p_Content, string p_Key){byte[] bytes = Encoding.UTF8.GetBytes(p_Key);byte[] inputBuffer = Encoding.UTF8.GetBytes(p_Content);RijndaelManaged managed = new RijndaelManaged{Key = bytes,Mode = p_CMode,Padding = p_PMode,IV = _IV};byte[] inArray = managed.CreateEncryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length);return Convert.ToBase64String(inArray, 0, inArray.Length);}

 二,加盐 

2.1 客户端iOS

/*** 对加解密的key进行加盐操作* @param key* @param salt* @return*/
+  (NSData *)AESAddSaltForKey:(NSString *)keysalt:(NSString *)salt {NSMutableData *derivedKey = [NSMutableData dataWithLength:32];NSData *saltData  = [salt dataUsingEncoding:NSUTF8StringEncoding];int result = CCKeyDerivationPBKDF(kCCPBKDF2,            // algorithmkey.UTF8String,  // password[key lengthOfBytesUsingEncoding:NSUTF8StringEncoding],  // passwordLengthsaltData.bytes,           // saltsaltData.length,          // saltLenkCCPRFHmacAlgSHA1,    // PRF10000,         // roundsderivedKey.mutableBytes, // derivedKeyderivedKey.length); // derivedKeyLen// Do not log password hereNSAssert(result == kCCSuccess,@"Unable to create AES key for key: %d", result);return derivedKey;
}
+  (NSData *)doCipher:(NSData *)plainText context:(CCOperation)encryptOrDecrypt key:(NSString *)key{//    CCKeyDerivationPBKDF
//    CCCalibratePBKDFNSString *salt = @"234567890-!@#$%^&*()_+QWERTYUIOP{ASDFGHJKL:XCVBNM<>";NSData *aSymmetricKey = [self AESKeyForKey:key salt:salt];CCCryptorStatus ccStatus   = kCCSuccess;size_t          cryptBytes = 0;    // Number of bytes moved to buffer.NSMutableData  *dataOut    = [NSMutableData dataWithLength:plainText.length + 32];ccStatus = CCCrypt( encryptOrDecrypt,kCCAlgorithmAES128,kCCOptionPKCS7Padding,(const void *)[aSymmetricKey bytes],32,ivBuff,plainText.bytes,plainText.length,dataOut.mutableBytes,dataOut.length,&cryptBytes);if (ccStatus != kCCSuccess) {NSLog(@"CCCrypt status: %d", ccStatus);}dataOut.length = cryptBytes;return dataOut;
}

2.2服务端

相关文章

How to add salt to AES Encryption in iOS and decrypting it using objective c

Cocoaphony

GitHub - lgc107/CommonCrypto: 文集https://www.jianshu.com/nb/25932942 的代码示例

在线AES加解密

iOS AES的加密解密


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部