iOS的加密AES128/CBC/nopadding为什么不工作

 我来答
dolphinMr817

2015-01-04 · 知道合伙人影视综艺行家
dolphinMr817
知道合伙人影视综艺行家
采纳数:35267 获赞数:317688
影视爱好者

向TA提问 私信TA
展开全部
为了使加密工作,而填充我不得不补充,而不是kCCOptionPKCS7Padding或kCCOptionECBMode均会被视为为0x0000。
此外,如果需要被编码的数据不具有kCCKeySizeAES128的长度数倍(16),然后保存该数据的矢量必须被调整到具有多个长度与kCCKeySizeAES128并充满我加空格的空值。
- (NSData *)AES128EncryptWithKey:(NSString *)key
{
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));

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

int dataLength = [self length];
int diff = kCCKeySizeAES128 - (dataLength % kCCKeySizeAES128);
int newSize = 0;

if(diff > 0)
{
newSize = dataLength + diff;
}

char dataPtr[newSize];
memcpy(dataPtr, [self bytes], [self length]);
for(int i = 0; i < diff; i++)
{
dataPtr[i + dataLength] = 0x20;
}

size_t bufferSize = newSize + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);

size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
0x0000, //No padding
keyPtr,
kCCKeySizeAES128,
NULL,
dataPtr,
sizeof(dataPtr),
buffer,
bufferSize,
&numBytesEncrypted);

if(cryptStatus == kCCSuccess)
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}

return nil;
}
御绿戎0EY
2017-03-03 · TA获得超过3.8万个赞
知道大有可为答主
回答量:2.7万
采纳率:38%
帮助的人:1317万
展开全部
AES是块加密,每次都是对固定长度的数据进行加密,不够的就需要补了,太长的话,就需要搞成两次运算。所以你需要看看是不是需要分成两次加密运算。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式