对于oauth2登录过程中使用的一些代码挑战,我需要执行以下操作:
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
如何从code_verifier中包含的随机字符串中做到这一点?
更新:您可以检查这是否正确吗?还是某些东西是不必要的/已弃用?我实际上不知道我在这里做什么,我只是从各处复制代码来解决它...
- (NSString *)createCodeChallengeWithVerifier:(NSString *)codeVerifier {
//Create ASCII
const char *asciiString = [codeVerifier cStringUsingEncoding:NSASCIIStringEncoding];
//Sha256
unsigned char buf[CC_SHA256_DIGEST_LENGTH];
CC_SHA256(asciiString, strlen(asciiString), buf);
NSMutableString * shaString = [NSMutableString stringWithCapacity:(CC_SHA256_DIGEST_LENGTH * 2)];
for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; ++i) {
[shaString appendFormat:@"%02x", buf[i]];
}
//Base 64 encode
NSData *dataFromShaString = [shaString dataUsingEncoding:NSUTF8StringEncoding];
return([dataFromShaString base64EncodedStringWithOptions:0]);
}