如何解密AES 256 https://aesencryption.net/-IOS [英] How to decrypt 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屋!