Как расшифровать AES 256 https://aesencryption.net/ - IOS - PullRequest
0 голосов
/ 28 августа 2018

Простой текст: шифрование и дешифрование текста с помощью алгоритма AES

Ключ (256): testsecret

Результат (https://aesencryption.net/): iFhSyFY3yYoO2G6GVGkdhZJjD + h0Pxv5fQnO3xIarzuGQSkIxlrpSprC5bC3gJ2U

Я использую небольшой код в объекте для расшифровки этого текста:

  • (NSData *) AES256DecryptWithKey: (NSString *) key { // ключ должен быть 32 байта для AES256, в противном случае будет дополнен нулями char keyPtr [kCCKeySizeAES256 + 1]; // комната для терминатора (не используется) bzero (keyPtr, sizeof (keyPtr)); // заполняем нулями (для заполнения)

    // получить данные ключа [key getCString: keyPtr maxLength: sizeof (keyPtr) кодировка: NSUTF8StringEncoding];

    NSUInteger dataLength = [собственная длина];

    // См. Документ: для блочных шифров выходной размер всегда будет меньше или // равен размеру ввода плюс размер одного блока. // Вот почему нам нужно добавить размер одного блока здесь size_t bufferSize = dataLength + kCCBlockSizeAES128; void * buffer = malloc (bufferSize);

    size_t numBytesDecrypted = 0; // char iv [kCCBlockSizeAES128 + 1]; bzero (iv, sizeof (iv)); CCCryptorStatus cryptStatus = CCCrypt (kCCDecrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256, NULL / * вектор инициализации (необязательно) /, [self bytes], dataLength, / input / buffer, bufferSize, / output * / & NumBytesDecrypted);

    if (cryptStatus == kCCSuccess) { // возвращаемая NSData становится владельцем буфера и освобождает его при освобождении return [NSMutableData dataWithBytesNoCopy: длина буфера: numBytesDecrypted]; }

    свободный (буфер); // освободить буфер; вернуть ноль; }

Результат: t \ PFLFC \ ^ X \ ^ C ^ \ ^^ \ ^ RWQV \ ^ \ ypt текст с алгоритмом AES

Кажется, это всегда неправильно первый 16-битный блок. Ты можешь мне помочь. что я не так при шифровании?

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Используйте CommonCrypto и убедитесь, что вы передаете параметры, которые в свою очередь дают вам kCCSuccess.

Просмотрите документацию CommonCrypto, и вы обязательно получите то, что ищете.

0 голосов
/ 28 августа 2018

Попробуйте использовать AESCrypt-ObjC вместо библиотеки Cryptlib.

Установка

Добавьте эту строку в ваш класс:

#import "AESCrypt.h"

Использование

NSString *message = @"top secret message";
NSString *password = @"p4ssw0rd";

шифрованной

NSString *encryptedData = [AESCrypt encrypt:message password:password];

Дешифровка

NSString *message = [AESCrypt decrypt:encryptedData password:password];

Надеюсь, это поможет.

Также вы можете увидеть этот ответ: https://stackoverflow.com/a/51767050/5167909

...