某日,群里一位开发者求助关于AES的解密问题,说来也巧,那天我正好好也刚刚调试完一个AES的解密问题,因此想顺手帮他解决下。
问题如下:
NSString *key = @"Q$b4D8cCNM$@O0kd";
NSString *contetntText = @"0v48yhPb+E+Xr0Q5trDIc01Ryy2Y+stlCrPEy0DWYKRcq8Z3prfCSZyBCsekQo9ndAmO1eLAQLrxT4KM4G4Y8R7Kr9UQ3TUo3ntC9e3Cv9EN72sYJCOCUCs8zuheijM/1FmV/E2PccwUuo1Bi4C8kf4QYAHKmRXupJAHiTo3w8s=";
流程:contetntText用base64解码,key用sha256加密,iv值是内容的前16位,具体内容是16位以后的东西。
不过链接中的源码不太符合这位朋友的需要,因为偏移量iv需要从接口数据的前16位获取,并且实际内容是16位以后。于是对源码进行修改,修改位置为:
这里主要涉及到NSData与bytes之间的转换
- iv:获取前面16位的长度,即
iv = [[NSData alloc] initWithBytes:[self bytes] length:16];
- 实际内容从16位开始,即
Byte *dataByte = (Byte *)[self bytes];
/*定义一个byte固定长度的数组*/
Byte byte[[self length] -16];
/*获取第16位以后的byte*/
memcpy(&byte,&dataByte[16],[self length] - 16);
*status = CCCryptorUpdate( cryptor, byte, (size_t)[self length] - 16, buf, bufsize, &bufused );
这样修改后,再调用AES的解密方法就可以了,有兴趣的可以试试。