Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用OpenSSL生成的私钥对NSString进行签名_Iphone_Ios_Objective C_Encryption_Rsa - Fatal编程技术网

Iphone 使用OpenSSL生成的私钥对NSString进行签名

Iphone 使用OpenSSL生成的私钥对NSString进行签名,iphone,ios,objective-c,encryption,rsa,Iphone,Ios,Objective C,Encryption,Rsa,我正在尝试使用RSA对HTTP头中的令牌进行签名,我必须将其传递给web服务—要求我应该使用自己的私钥进行加密,并将公钥提供给他们。这纯粹是为了验证消息是由我发送的 我知道有很多类似的问题,但今天早上我已经尝试了很多次,仍然没有接近我认为是微不足道的事情 我可以找到许多使用RSA和使用公钥加密的例子,但我的要求是使用私钥签名 从最初的尝试来看,apple示例安全代码和从中借用的大多数其他示例总是使用keychain生成私钥/公钥对-我更喜欢使用OpenSSL生成密钥,以便将公钥分发给我的客户端

我正在尝试使用RSA对HTTP头中的令牌进行签名,我必须将其传递给web服务—要求我应该使用自己的私钥进行加密,并将公钥提供给他们。这纯粹是为了验证消息是由我发送的

我知道有很多类似的问题,但今天早上我已经尝试了很多次,仍然没有接近我认为是微不足道的事情

我可以找到许多使用RSA和使用公钥加密的例子,但我的要求是使用私钥签名

从最初的尝试来看,apple示例安全代码和从中借用的大多数其他示例总是使用keychain生成私钥/公钥对-我更喜欢使用OpenSSL生成密钥,以便将公钥分发给我的客户端

我已经成功地生成了一些密钥,看起来我可以使用此代码加载私钥(抱歉,我已经混合了几个小时的实现,无法回忆其来源):

它似乎返回了一个有效的
SecKeyRef
,但我不知道如何使用它来签署
NSString

似乎有很多方法可以解决这个问题(构建OpenSSL并链接到它,使用Apple的keychain方法,在GitHub上使用一个部分完整的库),但我一直在走到一条死胡同——最好能找到一个合适的、完整的解决方案

大致如下:

NSString* signedString = [rsaHelper signString: @"Hello, World!" WithPrivateKey:@"rsaPrivate.p12"];
给定一个用公钥加密的字符串:

NSString* decryptedString = [rsaHelper decryptString: @"DK5tkgkfjkJJft=" WithPrivateKey:@"rsaPrivate.p12"];

会很有价值的!请注意,我并不害怕自己以任何方式编写这段代码,但希望能朝着正确的方向轻推:-)

使用私钥和公钥签名是相同的操作,只是使用不同的密钥完成。非对称密钥加密背后的思想是,两个密钥在任意方向上成对工作。当信息发送给您时,它将使用您的公钥进行加密,并且只能使用您的私钥进行解密。当您发送信息时,它将使用您的私钥进行加密,并且只能使用您的公钥进行解密。对于签名,同样的规则也适用。由于您声明您拥有可以使用公钥加密的代码,因此您应该能够只更改密钥。不幸的是,如果我向函数OSStatus status=SecKeyEncrypt(key,kSecPaddingPKCS1,(const uint8_t*)[buffer bytes]、[buffer length]、cipherBuffer和cipherBufferSize)提供私钥,则会出现OSStatus错误;如果我提供了一个公钥,就不会发生这种情况。您遇到了什么错误?
NSString* decryptedString = [rsaHelper decryptString: @"DK5tkgkfjkJJft=" WithPrivateKey:@"rsaPrivate.p12"];