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
提交
取消