ios - SecKeyRawSign 返回 OSStatus = noErr,但是随机签名对象

标签 ios security digital-signature seckeyref

我正在使用 SecKeyRawSign 对 PDF 的 SHA 摘要进行数字签名,SecKeyRawSign 报告 OSStatus = noErr,但每次运行项目时我都会获得随机签名对象.

私钥始终相同(保存在钥匙串(keychain)中)。我还验证了文档摘要是相同的(转换为 base64 并使用 hexdump)

所以问题是:给定相同的输入,SecKeyRawSign 报告 status = noErr,但输出不同。

这是我正在使用的代码:

NSData *hashData = [self getHashData];
SecKeyRef privateKey = [self getPrivateKeyFromKeychain];

size_t signatureBytesSize = SecKeyGetBlockSize(privateKey); 
uint8_t *signatureBytes = malloc(signatureBytesSize * sizeof(uint8_t));
memset((void *)signatureBytes, 0x0, signatureBytesSize);

OSStatus status = noErr;
status = SecKeyRawSign(privateKey, kSecPaddingSHA1, (const unsigned char *)hashData.bytes, SecKeyGetBlockSize(privateKey), signatureBytes, &signatureBytesSize);

if (status == noErr) {
    NSLog(@"Signing OK");
    NSLog(@"Signature: \"%s\"", signatureBytes);
} else {
    NSLog(@"Error signing data: result code: %d", (int)status);
}

我总是得到 status = noErr,“Signing OK”,但签名字节是随机的且随机大小。

我尝试使用不同的填充。还将签名缓冲区大小设置为 key 大小 - 11(根据文档)

研究文档时我找不到有关签名对象类型 (sig) 的更多详细信息。我假设它是可以转换为 Base64 的原始字节。

任何帮助将不胜感激.... e

最佳答案

我发现了问题,并且能够签署 PDF 哈希并验证签名。 我在 SecKeyRawSign

dataToSignLen 变量中使用 SecKeyGetBlockSize(privateKey) 而不是 hashData.length
size_t signatureBytesSize = SecKeyGetBlockSize(privateKey);
uint8_t *signatureBytes = malloc(signatureBytesSize * sizeof(uint8_t));
memset((void *)signatureBytes, 0x0, signatureBytesSize);
OSStatus signStatus = SecKeyRawSign(directPrivateKey, kSecPaddingPKCS1SHA1, (const unsigned char *)hashData.bytes, hashData.length, signatureBytes, &signatureBytesSize);

关于ios - SecKeyRawSign 返回 OSStatus = noErr,但是随机签名对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463342/

相关文章:

javascript - 使用 JavaScript 加密本地存储的数据

ios - 测试iOS应用程序的安全性

java - 无法将 X509 证书加载到 XML 数字签名中

ios - 如何为不同的屏幕尺寸设置不同的自动布局约束

ios - Realm :请展示如何正确创建对象

ios - Collectionview 的底部约束未在运行时更新

ios - 使用 Branch.io 生成的链接与 Facebook 共享对话框

wordpress - 为什么我在 wordpress 页面上的 firefox 中连接不安全

JAVA服务提供者SAML2请求-禁用数字签名

python - 如何使用python查找PDF文件中的数字签名