iOS RC4加解密算法
-(NSString *)encrypt:(NSString *)string withKey:(NSString *)key{
self.sBox = [[self frameSBox:key] mutableCopy];
unichar code[string.length];
int i = 0;
int j = 0;
for (int n = 0; n < string.length; n++) {
i = (i + 1) % SBOX_LENGTH;
j = (j + [[self.sBox objectAtIndex:i]integerValue]) % SBOX_LENGTH;
[self.sBox exchangeObjectAtIndex:i withObjectAtIndex:j];
NSInteger index=([self.sBox[i] integerValue]+[self.sBox[j] integerValue]);
NSInteger rand=([self.sBox[(index%SBOX_LENGTH)] integerValue]);
code[n]=(rand ^ (int)[string characterAtIndex:n]);
}
const unichar* buffer;
buffer = code;
return [NSString stringWithCharacters:buffer length:string.length];
}
- (NSString*) decrypt:(NSString*)string withKey:(NSString*)key
{
return [self encrypt:string withKey:key];
}
-(NSArray *)frameSBox:(NSString *)keyValue{
NSMutableArray *sBox = [[NSMutableArray alloc] initWithCapacity:SBOX_LENGTH];
int j = 0;
for (int i = 0; i < SBOX_LENGTH; i++) {
[sBox addObject:[NSNumber numberWithInteger:i]];
}
for (int i = 0; i < SBOX_LENGTH; i++) {
j = (j + [sBox[i] integerValue] + [keyValue characterAtIndex:(i % keyValue.length)]) % SBOX_LENGTH;
[sBox exchangeObjectAtIndex:i withObjectAtIndex:j];
}
return [NSArray arrayWithArray:sBox];
}
最新文章
- mono for android学习过程系列教程(2)
- Linux2 在Linux(CentOS)上配置SSH免登陆
- 1.0 UIApplication对象
- paramiko模块使用
- 泛型、Linq 查询使用
- SharePoint 错误集 3
- windows下Jdk和Tomcat的安装配置
- Mac之OS系统下搭建JavaEE环境 <;五>; 之Mysql数据库的安装及配置
- linux操作系统基础篇(九)
- href
- 变量类型、sprintf、不同类型之间的混合运算
- WPF ObservableCollection 异步调用问题
- centos7端口永久开放方法
- day-14带参装饰器、迭代器
- CF434D Nanami&#39;s Power Plant 最小割
- java 线程Thread 技术--1.5 Future与Callable
- css字体更小 css比12px更小的方法
- cocos2d-x 输出debug信息
- sql2008修改管理员与普通用户密码
- javascript保存excel
热门文章
- 【HDOJ】1150 Machine Schedule
- Node.js权威指南 (8) - 创建HTTP与HTTPS服务器及客户端
- POJ1218
- HDOJ(HDU) 2520 我是菜鸟,我怕谁(等差数列)
- HDU 3555 Bomb(数位DP)
- iOS中控件的Frame属性和Bounds属性的区别
- JavaScript高级程序设计3.pdf
- C#在ASP.NET4.5框架下的首次网页应用
- Oracle索引(B*tree与Bitmap)的学习总结
- 使用Topshelf创建Windows 服务