为了账号安全,请及时绑定邮箱和手机立即绑定

在 iOS-Objective C 上签名的数据在 Java 中验证时总是返回 false

在 iOS-Objective C 上签名的数据在 Java 中验证时总是返回 false

慕容708150 2022-06-04 14:52:28
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 端正确验证,但下次我再次创建相同的密钥和标识符时旧钥匙仍然存在于钥匙串中,所以给我带来了麻烦。为了解决这个问题,我刚刚从钥匙串中删除了钥匙,然后再次创建它们,现在它工作正常;)



查看完整回答
反对 回复 2022-06-04
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号