Blowfish for IOS
2016-12-25 19:44
561 查看
最近项目需求研究了一下blowfish的算法,发现网上都没有现成的,有一个还是一个坑,三天,都在弄这个,最后还是功夫不负有心人,弄好了,现在我就总结一下吧。
参考的是简书上一个人写的,很好
http://www.jianshu.com/p/ddd316925953
实现blowfish的通用方式代码如下
my key就是你的key
这种方式用的是系统的库,所以你没办法改,所以只适合通用
改成如上就好了,代码我明天贴出来,电脑没电了。
一、算法种类
对称加密,不对称加密,不可逆加密二、常见的算法
AES,DES,3DES,BLOWFISH,MD5,SHA1,SHA2等三、加密模式
ECB\CBC\CFB\CTR\OFB\CFB8四、通用的加解密的实现代码
如果项目没有特殊的pbox和sbox那就可以用一套通用的代码参考的是简书上一个人写的,很好
http://www.jianshu.com/p/ddd316925953
实现blowfish的通用方式代码如下
NSString *plaintText = @"你好"; NSData *source = [plaintText dataUsingEncoding:NSUTF8StringEncoding]; [source bfCryptoBlowfishEncodeWithMode:BuffCryptoModeECB iv:@"11111111" key:mykey completion:^(NSData *cryptoData) { NSMutableString *cypherText = [[NSMutableString alloc] init]; [cryptoData enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) { unsigned char *dataBytes = (unsigned char *) bytes; for (NSInteger i = 0; i < byteRange.length; i++) { NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff]; if ([hexStr length] == 2) { [cypherText appendString:hexStr]; } else { [cypherText appendFormat:@"0%@", hexStr]; } } }]; dispatch_async(dispatch_get_main_queue(),^{ NSLog(@"%@",cypherText); }); [cryptoData bfCryptoBlowfishDecodeWithMode:BuffCryptoModeECB iv:@"00000000" key:mykey completion:^(NSData *cryptoData2) { NSString *result= [[NSString alloc] initWithData:cryptoData2 encoding:NSUTF8StringEncoding]; NSLog(@"%@",result); }]; }];
my key就是你的key
这种方式用的是系统的库,所以你没办法改,所以只适合通用
特定的Blowfish的iOS实现
我找的网上的一个代码,用的是ECB模式,但是加解密出来的跟服务端用java出来的结果不一样,我研究了一下发现他的填充方式不一样,java那套是没够位就补0,网上找的那套是没够位就补长度,也就是PKCS5Padding和PKCS7Padding的区别,然后我就改了一下,发现还是不行,然后加密就好,但是解密还是有问题,找了好久发现是string 转成nsdata的方式不对,+(NSData *)hexStringToData:(NSString *)hexString{ const char *chars = [hexString UTF8String]; int i = 0; int len = (int)hexString.length; NSMutableData *data = [NSMutableData dataWithCapacity:len/2]; char byteChars[3] = {'\0','\0','\0'}; unsigned long wholeByte; while (i<len) { byteChars[0] = chars[i++]; byteChars[1] = chars[i++]; wholeByte = strtoul(byteChars, NULL, 16); [data appendBytes:&wholeByte length:1]; } return data; }
改成如上就好了,代码我明天贴出来,电脑没电了。
相关文章推荐
- Blowfish Secret Key Encryption Tests
- MPLS IOS images for the cisco 2500 Router
- URL for iOS developing
- 使用ArcGIS API for Flex构建Android和iOS移动地图应用程序
- [iOS开发站在巨人肩膀上]之Reusable collapsable table view for iOS
- ios在真机上调试时出现“Error launching remote program: failed to get the task for process xxx"解决办法(转)
- building-ios-apps-for-over-the-air-adhoc-distribution
- 源码推荐: html解析for iOS
- Custom URL scheme for iOS与Android需要注意的地方
- Limiting YouTube bandwidth for fortios 3.0
- ArcGIS API for iOS开发教程(五)数据查询
- Developing for a Jailbroken iPhone A to Z (iOS 4.0.1)
- Developing for a Jailbroken iPhone A to Z (iOS 4.0.1)(转)
- 成功使用ArcGIS API for iOS加载Google地图
- Configuring IPv6 for Cisco IOS
- 2010年8月29日周日_ArcGIS API For iOS_1
- ArcGIS API for iOS开发教程四 使用GraphicsLayer
- View Programming Guide for iOS 摘要
- UIDevice-with-UniqueIdentifier-for-iOS-5
- Google+ for iOS新增支持iPad和iPod touch