如何在iOS中使用带有多次迭代的salted sha512的WSSE
我在iOS中需要一些WSSE Header生成的帮助。 它是在Symfony2中编写的应用程序,它使用sha512算法, 5000次迭代 , encode_as_base64为true。 对于移动应用程序,我发现这个问题用于编码密码: SHA512 with salt for iOS虽然它只有一次迭代。 使用包含最后一个的简单循环就足够了吗?
我们找到了WSSE Headers的Android代码: http : //obtao.com/blog/2013/09/how-to-use-wsse-in-android-app/有可能做同样的事情在iOS或我们应该找到另一种身份validation方式,比如OAuth2?
如果要使用5000次迭代重现与Symfony2相同的加密,可以使用以下代码:
- (NSString *)hashPassword:(NSString *)password ansSalt:(NSString *)salt { NSString *passwordSalted = [NSString stringWithFormat:@"%@{%@}",password,salt]; NSData *passwordData = [passwordSalted dataUsingEncoding:NSUTF8StringEncoding]; uint8_t hash[CC_SHA512_DIGEST_LENGTH]; CC_SHA512([passwordData bytes], [passwordData length], hash); NSMutableData *allData = [[NSMutableData alloc] init]; [allData appendBytes:hash length:CC_SHA512_DIGEST_LENGTH]; for (NSInteger i = 1; i < 5000; i++) { [allData appendBytes:[passwordData bytes] length:[passwordData length]]; uint8_t hashLoop[CC_SHA512_DIGEST_LENGTH]; CC_SHA512([allData bytes], [allData length], hashLoop); [allData setLength:0]; [allData appendBytes:hashLoop length:CC_SHA512_DIGEST_LENGTH]; } NSData *imageData = [NSData dataWithBytes:[allData bytes] length:[allData length]]; return [imageData base64EncodedStringWithOptions:0]; }
别忘了导入CommonDigest.h:
#import
对于SHA512,请尝试以下操作:
#import + (NSData *)sha512:(NSData *)data { unsigned char hash[CC_SHA512_DIGEST_LENGTH]; if ( CC_SHA512([data bytes], [data length], hash) ) { NSData *sha512 = [NSData dataWithBytes:hash length:CC_SHA512_DIGEST_LENGTH]; return sha512; } return nil; }
对于WSSE头文件,请查看https://github.com/laiso/CocoaWSSE
- 如何在IONIC 2中注册BLE状态通知
- Phonegap,textarea不会接受input
- 是否可以使用MonoDroid和MonoTouch创build一个可供非Mono开发人员使用的跨平台共享库?
- 如何检测系统中文,韩文和英文字体而不为每个字体嵌入一个? (Android和IOS上的AIR手机)
- 如何知道每个iOS或Android版本支持哪些Unicode表情符号标志?
- iOS 6的iPhone 5应用不全屏在Phonegap构build?
- 使用REST Api的移动应用程序开发计划是个好主意?
- Phonegap 3.5.0 Cordova File API错误:无法读取未定义的属性'dataDirectory'
- 适用于Android和iOS的英特尔TBB