aaaaaaaaaaaa

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *inputTextField;
@property (weak, nonatomic) IBOutlet UITextView *outputTextView;

- (IBAction)encryptDecryptButtonTapped:(id)sender;

@end

#import "ViewController.h"
#import <CommonCrypto/CommonCrypto.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (IBAction)encryptDecryptButtonTapped:(id)sender {
    NSString *inputString = self.inputTextField.text;
    
    // Convert input string to array of integers
    NSArray *inputArray = [inputString componentsSeparatedByString:@","];
    NSMutableArray *integerArray = [NSMutableArray array];
    for (NSString *numberString in inputArray) {
        [integerArray addObject:@(numberString.integerValue)];
    }
    
    // Encrypt the array using AES
    NSData *encryptedData = [self encryptArray:integerArray];
    
    // Decrypt the encrypted data
    NSArray *decryptedArray = [self decryptData:encryptedData];
    
    // Sort the decrypted array
    NSArray *sortedArray = [decryptedArray sortedArrayUsingSelector:@selector(compare:)];
    
    // Convert sorted array to hexadecimal string
    NSString *hexString = [self hexadecimalStringFromData:[self dataFromIntArray:sortedArray]];
    
    // Calculate SHA-256 hash value of sorted array
    NSString *hashValue = [self sha256HashValueForData:[self dataFromIntArray:sortedArray]];
    
    // Display the results in the output text view
    self.outputTextView.text = [NSString stringWithFormat:@"Sorted Array: %@\nEncrypted Value: %@\nSHA-256 Hash Value: %@", sortedArray, hexString, hashValue];
}

- (NSData *)encryptArray:(NSArray *)array {
    // Convert array to data
    NSData *data = [self dataFromIntArray:array];
    
    // Perform AES encryption
    // Replace 'key' and 'iv' with your own values
    NSString *key = @"YourEncryptionKey";
    NSString *iv = @"YourEncryptionIV";
    NSData *encryptedData = [self aesEncryptData:data withKey:key iv:iv];
    
    return encryptedData;
}

- (NSArray *)decryptData:(NSData *)data {
    // Perform AES decryption
    // Replace 'key' and 'iv' with your own values
    NSString *key = @"YourEncryptionKey";
    NSString *iv = @"YourEncryptionIV";
    NSData *decryptedData = [self aesDecryptData:data withKey:key iv:iv];
    
    // Convert decrypted data to array of integers
    NSArray *decryptedArray = [self intArrayFromData:decryptedData];
    
    return decryptedArray;
}

- (NSData *)dataFromIntArray:(NSArray *)array {
    NSMutableData *data = [NSMutableData data];
    for (NSNumber *number in array) {
        int intValue = number.intValue;
        [data appendBytes:&intValue length:sizeof(intValue)];
    }
    return data;
}

- (NSArray *)intArrayFromData:(NSData *)data {
    NSMutableArray *array = [NSMutableArray array];
    const int *bytes = data.bytes;
    NSUInteger length = data.length / sizeof(int);
    for (NSUInteger i = 0; i < length; i++) {
        int intValue = bytes[i];
        [array addObject:@(intValue)];
    }
    return array;
}

- (NSData *)aesEncryptData:(NSData *)data withKey:(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 = data.length;
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES128,
                                          ivPtr,
                                          data.bytes, dataLength,
                                          buffer, bufferSize,
                                          &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
    
    free(buffer);
    return nil;
}

- (NSData *)aesDecryptData:(NSData *)data withKey:(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 = data.length;
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES128,
                                          ivPtr,
                                          data.bytes, dataLength,
                                          buffer, bufferSize,
                                          &numBytesDecrypted);
    
    if (cryptStatus == kCCSuccess) {
        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }
    
    free(buffer);
    return nil;
}

- (NSString *)hexadecimalStringFromData:(NSData *)data {
    const unsigned char *dataBytes = (const unsigned char *)data.bytes;
    NSMutableString *hexString = [NSMutableString stringWithCapacity:data.length * 2];
    for (NSUInteger i = 0; i < data.length; i++) {
        [hexString appendFormat:@"%02X", dataBytes[i]];
    }
    return [hexString copy];
}

- (NSString *)sha256HashValueForData:(NSData *)data {
    unsigned char hash[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(data.bytes, (CC_LONG)data.length, hash);
    
    NSMutableString *hashValue = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
    for (NSUInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
        [hashValue appendFormat:@"%02X", hash[i]];
    }
    return [hashValue copy];
}

@end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值