如何解密AES 256 https://aesencryption.net/-IOS [英] How to decrypt AES 256 https://aesencryption.net/ - IOS

查看:112
本文介绍了如何解密AES 256 https://aesencryption.net/-IOS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

纯文本:使用AES算法加密和解密文本



密钥(256):testsecret



结果( https://aesencryption.net/ ):iFhSyFY3yYoO2G6GVGkdhZJjD + h0Pxv5fQnO3xIarzuGQSkIxlrpSprC $ 5bC3 $ b

我使用对象中的小代码解密此文本:



  • (NSData *)AES256DecryptWithKey:(NSString *)key {
    //'key'对于AES256应该为32个字节,将被空填充,否则
    char keyPtr [kCCKeySizeAES256 + 1]; //终止符的空间(未使用)
    bzero(keyPtr,sizeof(keyPtr)); //用零填充(用于填充)



    //获取关键数据
    [key getCString:keyPtr maxLength:sizeof(keyPtr)encoding: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 ,/
    输入 /
    缓冲区,bufferSize,/
    输出* /
    & numBytesDecrypted);



    if(cryptStatus == kCCSuccess)
    {
    //返回的NSData拥有缓冲区的所有权,并在释放
    时释放它的所有权返回[NSMutableData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }



    free(buffer); //释放缓冲区;
    归零; }



结果:t\PFLFC\ ^ X\ ^ C



使用AES算法对文本进行^^^^^^^似乎总是错误的第一个16位块。你能帮我吗。加密时我错了什么?

解决方案

您在osstatus中的CCCryptorStatus参数:
应该看起来像这样



cryptStatus = CCCrypt(kCCDecrypt,kCCAlgorithmAES128,kCCOptionECBMode + kCCOptionPKCS7Padding,keyPtr,kCCKeySizeAES256 NULL,[自身字节],dataLength,缓冲区,bufferSize,& numBytesEncrypted) ;



但是密钥的长度小于16个字节。至少确保您的秘密密钥应为16个字节。


Plain text : Encrypt and decrypt text with AES algorithm

Key (256) : testsecret

Result (https://aesencryption.net/) : iFhSyFY3yYoO2G6GVGkdhZJjD+h0Pxv5fQnO3xIarzuGQSkIxlrpSprC5bC3gJ2U

i use small code in object to decrypt this this text :

  • (NSData*)AES256DecryptWithKey:(NSString*)key { // 'key' should be 32 bytes for AES256, will be null-padded otherwise char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused) bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

    // fetch key data [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    NSUInteger dataLength = [self length];

    //See the doc: For block ciphers, the output size will always be less than or //equal to the input size plus the size of one block. //That's why we need to add the size of one block here 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 /* initialization vector (optional) /, [self bytes], dataLength, / input / buffer, bufferSize, / output */ &numBytesDecrypted);

    if (cryptStatus == kCCSuccess) { //the returned NSData takes ownership of the buffer and will free it on deallocation return [NSMutableData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; }

    free(buffer); //free the buffer; return nil; }

Result : t\PFLFC\^X\^C^\^^\^RWQV\^\ypt text with AES algorithm

Seem it alway wrong first 16bit block. Can u help me. what i'm wrong when encrypt ?

解决方案

Your CCCryptorStatus parameters in osstatus : should look like this

cryptStatus = CCCrypt( kCCDecrypt, kCCAlgorithmAES128,kCCOptionECBMode + kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES256 NULL,[self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted );,

However you length of the key is less than 16 bytes. At least make sure that your secret key should be of 16 bytes.

这篇关于如何解密AES 256 https://aesencryption.net/-IOS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆