【发布时间】:2014-01-13 13:01:06
【问题描述】:
我知道是圣诞节,但我有一个大问题需要解决,我正在这里寻找我的圣诞奇迹......
我已阅读苹果文档,只有指南如何从证书创建 RSA 公钥和私钥。就我而言,我在 .pem 文件中只有 RSA 私钥。所以我的问题是他的:我应该如何使用该密钥签署数据? 我不想使用 openssl。我试过没有运气,我认为可以使用苹果 API 使用 RSA 对数据进行签名。
这就是我的钥匙的样子:
-----BEGIN RSA PRIVATE KEY-----
..............................
-----END RSA PRIVATE KEY-----
这是我到目前为止所做的:
-(NSString *)signing:(NSString *)dataString {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"PrestaMobilekey" ofType:@"pem"];
NSData *data = [[NSData alloc]initWithContentsOfFile:filePath];
SecKeyRef privateKey = (__bridge SecKeyRef)(data);
uint8_t *signedHashBytes = NULL;
// calculate private key size
size_t signedHashBytesSize = SecKeyGetBlockSize(privateKey);
// create space to put signature
signedHashBytes = (uint8_t *)malloc(signedHashBytesSize * sizeof(uint8_t));
memset((void *)signedHashBytes, 0x0, signedHashBytesSize);
OSStatus status = NULL;
// sign data
status = SecKeyRawSign(privateKey,
kSecPaddingPKCS1SHA1,
[[[dataString dataUsingEncoding:NSUTF8StringEncoding] SHA1] bytes],
CC_SHA1_DIGEST_LENGTH,
signedHashBytes,
&signedHashBytesSize);
if (privateKey) {
CFRelease(privateKey);
}
// get signature hash
NSData *signedHash = [NSData dataWithBytes:(const void *)signedHashBytes length:(NSUInteger)signedHashBytesSize];
// release created space
if (signedHashBytes) {
free(signedHashBytes);
}
if (status != errSecSuccess) {
return @"";
}
// return Base64 encoded signature string
return [Base64 encode:signedHash];
}
我真的希望有人能帮助我,提供一些好的信息和答案。
谢谢。
【问题讨论】:
-
没有人回答这个问题,如果您想提供帮助,请回答我的问题,这就是我所需要的。我不需要人们说这是重复的,因为我知道它不是。
-
多次问同一个问题不会让你更快地得到答案。您的示例代码似乎完全相同(除了一些添加的 cmets),因此很明显,自从您上次询问以来,您还没有自己完成任何工作。
-
感谢您的批评,但我会尽我所能完成我的任务。你的话有道理,但我已经为此苦苦挣扎了两个星期,我很绝望。请理解我。
标签: ios objective-c encryption rsa