最近公司新项目决定换一种数据加密方式,之前用的是des+Base64,现在决定用rc4+Base64,在网上找了不少用c写的rc4 不过一直和服务端对不上,这里有个小坑,一会再说。
方法一
文件有点大,里面有写用不到和重复的自己删除下吧,有些人可能用的到,需要的文件 密码:pome
1.首先,把文件里的openssl库,拖到项目里
2.在项目中导入lib-ios里的两个库:libcrypto.a和libssl.a,打开工程,Build Setting ->Header Search Paths 添加字段$(SRCROOT)/OpenSSL-master/include-ios (这里根据具体路径来),Library Search Paths 添加字段$(PROJECT_DIR)/工程名/文件夹名字(这里根据具体路径来);
3.从下载文件里找到zhyrc4.c、zhyrc4.h、base64.c、base64.h,拖进项目里。
4.使用:导入头文件#include "zhyrc4.h",
接下来编译不报错的话就可以了
接下来你可以建立一个工具类
+ (NSString *)encode:(NSString *)data key:(NSString *)key {
const char *pwd = [key UTF8String];
const char * cData = [data UTF8String];
char *base64_data = NULL;
zhyencode(pwd, cData, strlen(cData), &base64_data);
NSString * str = [NSString stringWithUTF8String:base64_data];
if (base64_data) {
free(base64_data);
base64_data = NULL;
}
return str;
}
+ (NSString *)decode:(NSString *)data key:(NSString *)key {
const char *pwd = [key UTF8String];
const char * cData = [data UTF8String];
char *data1=NULL;
zhydecode(pwd, cData, &data1);
NSString * str = [NSString stringWithUTF8String:data1];
if (data1) {
free(data1);
data1 = NULL;
}
return str;
}
外部调用就可以了,只要路径写的没问题
这里进行了一次base64加密,如果不需要base64加密,在zhyrc4.c、zhyrc4.h改改就行了,因为代码很少,直接发demo的话可能忘了写路径,
这就没什么东西了,说说为什么之前和服务器那边对不上,因为这次项目接口是PHP写的,他那边的加密秘钥如果不满256位的话会用null填充
但是我这边的c却不是这样,所以导致加密后我们两个对不上,最后他把填充那一步去掉了,应该也没问题,至少现在没有,或者把c改了,不过我们试过,我想应该是没问题的
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
方法二
这种方法就简单了,公司c++大神写的 短小精悍,项目一直再用链接: 文件下载地址 密码: qf5v ,文件两个c文件,分别是rc4加密和base64加密,EncodeControl这是一个我用OC封装的一个工具类,
+ (NSString *)encode:(NSString *)data key:(NSString *)key;
+ (NSString *)decode:(NSString *)data key:(NSString *)key;
上面分别为加密、解密数据,key是秘钥,data是要加密的字符串,json的话当然是要转成json字符串进行加密
+(NSString *)encodeData:(NSDictionary *)data;
+(NSDictionary *)convertDataToDic:(NSString *)data;
这个是我自己用的了,秘钥外部定死,更换也方便,分别是加密、解密,加密是把把字典加密成加密串,解密是把加密串解密成字典,各位看官按照具体需要再改吧,都是很简单,就不太细说了
希望能帮到各位,有问题请留言。