iosaes加密128
嚴格地說,AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度:
AES的區塊長度固定為128位,密鑰長度則可以是128,192或256位;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256位為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
(1)iosaes加密128擴展閱讀
AES加密模式
對稱/分組密碼一般分為流加密(如OFB、CFB等)和塊加密(如ECB、CBC等)。對於流加密,需要將分組密碼轉化為流模式工作。對於塊加密(或稱分組加密),如果要加密超過塊大小的數據,就需要涉及填充和鏈加密模式。
優點:1、簡單;
2、有利於並行計算;
3、誤差不會被傳送;
缺點:
1、不能隱藏明文的模式;
2、可能對明文進行主動攻擊;
3、因此,此模式適於加密小消息。
B. iOS AES128 ECB加密 對位元組數組而不是字元串怎麼進行加密
// 開發中用到AES128加密、解密
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCryptor.h>
@interface NSData (AES)
- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv;
- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv;
- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv;
@end
@implementation NSData (AES)
- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv
{
char keyPtr[kCCKeySizeAES128 + 1];
memset(keyPtr, 0, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
memset(ivPtr, 0, sizeof(ivPtr));
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesCrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(operation,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];
}
free(buffer);
return nil;
}
- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv
{
return [self AES128Operation:kCCEncrypt key:key iv:iv];
}
- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv
{
return [self AES128Operation:kCCDecrypt key:key iv:iv];
}
@end
int main(int argc, char const* argv[])
{
NSAutoreleasePool* pool;
pool = [[NSAutoreleasePool alloc] init];
NSString *key = [NSString stringWithCString:argv[1] encoding:NSUTF8StringEncoding];
NSString *iv = [NSString stringWithCString:argv[2] encoding:NSUTF8StringEncoding];
NSString *data_str = [NSString stringWithCString:argv[3] encoding:NSUTF8StringEncoding];
NSData *data = [data_str dataUsingEncoding:NSUTF8StringEncoding];
NSData *en_data = [data AES128EncryptWithKey:key iv:iv];
NSData *de_data = [en_data AES128DecryptWithKey:key iv:iv];
NSString *de_str = [[[NSString alloc] initWithData:de_data
encoding:NSUTF8StringEncoding] autorelease];
NSLog(@"%@", en_data);
NSLog(@"%@", de_str);
[pool drain];
return 0;
}
C. AES加密演算法256位密鑰與128位密鑰的不同是什麼
一、指代不同
1、256位密鑰:AES的區塊長度固定為256位,密鑰長度則可以是256。
2、128位密鑰:AES的區塊長度固定為128位,密鑰長度則可以是128。
二、安全性不同
1、256位密鑰:256位密鑰安全性高於128位密鑰。
2、128位密鑰:128位密鑰安全性低於256位密鑰。
(3)iosaes加密128擴展閱讀
AES和Rijndael加密法並不完全一樣(雖然在實際應用中二者可以互換),因為Rijndael加密法可以支持更大范圍的區塊和密鑰長度。
AES的區塊長度固定為128位,密鑰長度則可以是128,192或256位;而Rijndael使用的密鑰和區塊長度可以是32位的整數倍,以128位為下限,256位為上限。加密過程中使用的密鑰是由Rijndael密鑰生成方案產生。
對稱/分組密碼一般分為流加密(如OFB、CFB等)和塊加密(如ECB、CBC等)。對於流加密,需要將分組密碼轉化為流模式工作。對於塊加密(或稱分組加密),如果要加密超過塊大小的數據,就需要涉及填充和鏈加密模式。
ECB模式是最早採用和最簡單的模式,將加密的數據分成若干組,每組的大小跟加密密鑰長度相同,然後每組都用相同的密鑰進行加密。
D. IOS AES加密
AES加密有四種工作模式:ECB、CBC、CFB和OFB,其中IOS支持ECB(kCCOptionPKCS7Padding 對應Java中的kCCOptionPKCS5Padding)和CBC(kCCOptionECBMode)
AES是開發中常用的加密演算法之一。然而由於前後端開發使用的語言不統一,導致經常出現前端加密而後端不能解密的情況出現。然而無論什麼語言系統,AES的演算法總是相同的, 因此導致結果不一致的原因在於 加密設置的參數不一致 。於是先來看看在兩個平台使用AES加密時需要統一的幾個參數。
參考: https://welkinx.com/2016/07/30/10/
ios中使用AES128位 ECB模式加密 結果轉換16進制
https://tieba..com/p/4581819586
與伺服器通訊的時候,除了確定密鑰外,加密模式和填充方式也要確定。第一個例子中,就是使用了kCCOptionPKCS7Padding加密模式,並且有IV(初始向量),而第二個例子中使用了ECB(沒有補碼方式)。
此外也要注意轉碼後的密文是轉成16進制,還是base64編碼。
參考鏈接:
http://blog.51cto.com/ciphertext/1420338
https://welkinx.com/2016/07/30/10/
https://tieba..com/p/4581819586