- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 RSASHA-256 签署 JWT 并尝试在我的 iOS SDK 上验证它。
发送完整数据时,验证通过。
但是,当篡改收到的数据时,我仍然收到误报。
在此处添加代码:
//
// NSData+VerifySignature.m
// InsertFramework
//
// Created by yaniv1 on 1/13/16.
// Copyright © 2016 Insert. All rights reserved.
//
#import "NSData+VerifySignature.h"
#import "IIOStringEncoder.h"
#import "IIOLog.h"
#import "IIORSA.h"
@implementation NSData (VerifySignature)
-(NSArray *)createComponents{
NSString *data =[[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
NSArray *components = [data componentsSeparatedByString:@"."];
if (!components || [components count] != 3) {
IIOErrorLog(@"Invalid JWT received for verification");
return nil;
}
return components;
}
-(NSData *)verifySignature:(NSHTTPURLResponse *)urlResponse {
//Getting response header content-type and checking if it is jwt
NSString *contentType = [[[urlResponse allHeaderFields][@"Content-Type"] componentsSeparatedByString:@";"] objectAtIndex:0];
if (![contentType isEqualToString:@"insert/jwt"])
{
return nil;
}
NSArray *signatureComponents = [self createComponents];
if (!signatureComponents) {
return nil;
}
//JWT is seperated into his 3 components
NSString *header = signatureComponents[0];
NSString *payload = signatureComponents[1];
NSString *signature = signatureComponents[2];
//Turining signature received in base64 to base64UrlEncoded
NSData *base64UrlEncodedSig = [IIOStringEncoder dataWithBase64UrlEncodedString:signature];
SecKeyRef pKey = [IIORSA addPublicKey];
if (!pKey) {
IIOErrorLog(@"Failed to create public key, which results in verification failure");
return nil;
}
//Creating the data to verify the signature, meaning the header.payload
NSString *headerAndPayload = [[header stringByAppendingString:@"."] stringByAppendingString:payload];
NSData *dataHeaderAndPayload = [headerAndPayload dataUsingEncoding:NSUTF8StringEncoding];
//Verify the signature. For further details, go to
BOOL status = SecKeyRawVerify (pKey,
kSecPaddingPKCS1SHA1,
(const uint8_t *)[dataHeaderAndPayload bytes],
(size_t)[dataHeaderAndPayload length],
(const uint8_t *)[base64UrlEncodedSig bytes],
(size_t)[base64UrlEncodedSig length]
);
if (!status) {
IIOErrorLog(@"Failed to verify signature");
return nil;
}
NSData *payloadDecodedData = [[NSData alloc] initWithBase64EncodedString:payload options:0];
return payloadDecodedData;
}
@end
有人可以建议吗?
最佳答案
该方法不返回 BOOL
。查看reference :
OSStatus SecKeyRawVerify(SecKeyRef key,
SecPadding padding,
const uint8_t *signedData,
size_t signedDataLen,
const uint8_t *sig,
size_t sigLen);
关于ios - iOS 中的 SecKeyRawVerify 收到误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763884/
我正在使用 RSASHA-256 签署 JWT 并尝试在我的 iOS SDK 上验证它。 发送完整数据时,验证通过。 但是,当篡改收到的数据时,我仍然收到误报。 在此处添加代码: // // NSD
我正在使用数字证书对我的应用程序中的数据文件进行签名。当对 SecKeyRawVerify 的调用返回 -9809 时,下面的代码片段失败。这是在 iPhone 上运行的。我什至无法准确识别此错误代码
我有一根绳子。我想在 swift3 中使用 SecKeyRawSign 和 SecKeyRawVerify。我使用的是 Xcode 8.3.3 func signString(string: S
我正在尝试为 MacOSX (>10.6) 创建一个与 iOS SecKeyRawVerify(验证数字签名)功能相同的功能,但到目前为止我无法这样做。我想知道为什么 Apple 会为 iOS 提供这
我需要在 mac 上对一些数据进行数字签名,然后在 iOS 上进行验证。因此,我使用开放式 ssl 以 DER 格式为公钥生成了 RSA key 对和证书(尝试使用 SecKeyGeneratePai
我正在尝试使用公钥验证数据,使用 http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/ 中提到的确切方法. 我用模拟器 iOS
我是一名优秀的程序员,十分优秀!