iOS 代码://step 1//start of key pair genrationNSString * PrivTagString = @"com.manish.rsa.privIdentifier";NSString * PubTagString = @"com.manish.rsa.pubIdentifier"; privateTag = [PrivTagString dataUsingEncoding:NSUTF8StringEncoding]; publicTag = [PubTagString dataUsingEncoding:NSUTF8StringEncoding];NSDictionary *privateAttributes = @{(NSString *)kSecAttrIsPermanent: @YES, (NSString *)kSecAttrApplicationTag: privateTag};NSDictionary *publicAttributes = @{(NSString *)kSecAttrIsPermanent: @YES, (NSString *)kSecAttrApplicationTag: publicTag};NSDictionary *pairAttributes = @{(NSString *)kSecAttrKeyType: (NSString *)kSecAttrKeyTypeRSA, (NSString *)kSecAttrKeySizeInBits: @2048, (NSString *)kSecPublicKeyAttrs: publicAttributes, (NSString *)kSecPrivateKeyAttrs: privateAttributes};OSStatus osStatus = SecKeyGeneratePair((CFDictionaryRef)pairAttributes, &publicKeyRef, &privateKeyRef);switch (osStatus) { case noErr: break; default: break;}//end of key pair key genration//step2//export ublic key for java serverNSLog(@"%@",[self getPublicKeyAsBase64ForJavaServer]);//step3//Create the SHA256 digest of the custom string with CC_SHA256NSString *stringToSign = @"Manish";NSMutableData *hash = [NSMutableData dataWithLength:(NSUInteger)CC_SHA256_DIGEST_LENGTH];NSData *data = [stringToSign dataUsingEncoding:NSUTF8StringEncoding];CC_SHA256(data.bytes, (CC_LONG)data.length, hash.mutableBytes);//step4// Sign the hash with the private keysize_t blockSize = SecKeyGetBlockSize(privateKeyRef);NSUInteger hashDataLength = hash.length;const unsigned char *hashData = (const unsigned char *)hash.bytes;NSMutableData *result = [NSMutableData dataWithLength:blockSize];uint8_t *signedHashBytes = malloc(blockSize * sizeof(uint8_t));memset((void *) signedHashBytes, 0x0, blockSize);size_t encryptedDataLength = blockSize;
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
我在代码中发现了错误,因为我在钥匙串中创建密钥时保存了密钥,所以第一次如果我使用签名密钥和公钥,它会在 java 端正确验证,但下次我再次创建相同的密钥和标识符时旧钥匙仍然存在于钥匙串中,所以给我带来了麻烦。为了解决这个问题,我刚刚从钥匙串中删除了钥匙,然后再次创建它们,现在它工作正常;)
添加回答
举报
0/150
提交
取消
