在做热修复的时候,使用openssl对文件进行AES加密,然后使用OC进行解密,中间遇到了些坑,分享出来。
##Installation
只需拷贝Core/AES.{h.m}即可
##Usage
使用方式如下:
NSString *test = [AES encryptAES:@"I'm AES" key:@"447C54BE3ACDFAF2E131B7657180D5AA" initialVector:nil keySize:kWMKeySizeAES128];
NSString *deTest = [AES decryptAES:test key:@"447C54BE3ACDFAF2E131B7657180D5AA" initialVector:nil keySize:kWMKeySizeAES128];
NSLog(@"%s:%@",__func__,deTest);##注意点
以下:
- OC中使用CCCrypt()方法进行加密,该方法只支持
AES模式中的ECB和CBC,因ECB安全性不高,故使用CBC模式。 - OC中使用CCCrypt()进行解密的时候,key,iv的转换都需要注意,openssl使用的是十六进制的数,而OC进行封装的时候,容易传入的是字符串,
AES.{h.m}中已经进行了类似于"EBC"=>0xEBC这样的格式转换,开发者需注意该点。
##Openssl 使用Openssl进行文件加密命令如下:
//生成key和iv
$openssl enc -aes-128-cbc -k secret -P -md sha1
salt=08688003DD77B43B
key=4CE729B454CBE5DB751140EE2A3C3C44
iv =1EB526F904BE7EBDAF046ED75B2FFDC7
//进行加密
$openssl enc -aes-128-cbc -in test.file -out test.enc -K 4CE729B454CBE5DB751140EE2A3C3C44 -iv 1EB526F904BE7EBDAF046ED75B2FFDC7
//进行解密验证,-d 代表 解密
$openssl aes-128-cbc -d -K 4CE729B454CBE5DB751140EE2A3C3C44 -iv 1EB526F904BE7EBDAF046ED75B2FFDC7 -in test.enc -out test.de##Test
先用openssl对字符串进行AES加密:
$openssl enc -aes-128-cbc -k secret -P -md sha1
salt=08688003DD77B43B
key=4CE729B454CBE5DB751140EE2A3C3C44
iv =1EB526F904BE7EBDAF046ED75B2FFDC7
$echo "I'm Test" | openssl enc -aes-128-cbc -p -a -K 4CE729B454CBE5DB751140EE2A3C3C44 -iv 1EB526F904BE7EBDAF046ED75B2FFDC7
salt=78035160E07F0000
key=4CE729B454CBE5DB751140EE2A3C3C44
iv =1EB526F904BE7EBDAF046ED75B2FFDC7
HoP38q0t30OXkI1dEesILQ==然后在OC中进行解密
NSString *deTest = [AES decryptAES:@"HoP38q0t30OXkI1dEesILQ==" key:@"4CE729B454CBE5DB751140EE2A3C3C44" initialVector:@"1EB526F904BE7EBDAF046ED75B2FFDC7" keySize:kWMKeySizeAES128];
NSLog(@"%s:%@",__func__,deTest);运行工程发现输出如下:
AESExample:I'm AES
代码详见工程。
WuShiHai, 408939786@qq.com
WMHotfix is available under the MIT license. See the LICENSE file for more info.