3
iPhone의 PKI 라이브러리를 사용하여 짧은 문자열 (12345678)을 암호화하려고하는데 사용하려고 할 때마다 오류 -9809 (예 : errSSLCrypto)가 계속 나타납니다. SecKeyEncrypt. SecureTransport.h 헤더 파일은이 오류를 "기본 암호화 오류"로 간단하게 설명합니다.이 오류는별로 의미가 없습니다. 다음과 같이iPhone 공개 키 암호화 SecKeyEncrypt가 오류 9809 (errSSLCrypto)를 반환합니다.
내 코드는 다음과 같습니다
- (NSData *)encryptDataWithPublicKey:(NSString *)plainText {
OSStatus result = -1;
NSData *plainTextData = [plainText dataUsingEncoding:NSASCIIStringEncoding];
size_t plainTextLength = [plainTextData length];
SecTrustRef trustRef;
SecTrustResultType trustResult;
SecPolicyRef policy = SecPolicyCreateBasicX509();
result = SecTrustCreateWithCertificates(m_oCert, policy, &trustRef);
if (result != errSecSuccess) {
NSLog(@"Trust create failed with code: %d",result);
return nil;
}
result = SecTrustEvaluate(trustRef, &trustResult);
if (result != errSecSuccess) {
NSLog(@"Trust eval failed with code: %d",result);
CFRelease(trustRef);
return nil;
}
SecKeyRef publicKey = SecTrustCopyPublicKey(trustRef);
uint8_t *cipherTextBuf = NULL;
size_t cipherTextLen = 0;
size_t keyBlockSize = SecKeyGetBlockSize(publicKey);
int maxInputSize = keyBlockSize - 11; //If using PKCS1 Padding, else keyBlockSize
if (plainTextLength > maxInputSize) {
//Fail
NSLog(@"Data size is larger than max permitted!");
CFRelease(trustRef);
CFRelease(publicKey);
CFRelease(policy);
return nil;
}
cipherTextBuf = malloc(sizeof(uint8_t)*keyBlockSize);
memset(cipherTextBuf,0,keyBlockSize);
//result = SecKeyEncrypt(publicKey, kSecPaddingPKCS1, plainTextBuf, plainTextLength, cipherTextBuf, &cipherTextLen);
result = SecKeyEncrypt(publicKey, kSecPaddingNone, (const uint8_t *)[plainTextData bytes], plainTextLength, cipherTextBuf, &cipherTextLen);
NSData *cipherText = nil;
if (result == errSecSuccess) {
cipherText = [NSData dataWithBytes:cipherTextBuf length:cipherTextLen];
} else {
NSLog(@"Error detected: %d",result);
}
free(cipherTextBuf);
cipherTextBuf = NULL;
CFRelease(trustRef);
CFRelease(publicKey);
CFRelease(policy);
return cipherText;
}
내가 무엇을 사용 패딩 중요하지 않습니다, 그들은 모두 같은 오류를 제공합니다. 공개 키는 클라이언트가 제공 한 인증서에서 파생되었으며 키가 유효한지 확인했습니다. 내가 뭘 잘못하고 어떻게 제대로 기능을 사용합니까?
당신의 기능을위한 Thax는 나를 암호화하는데 도움이되었습니다. 그러나 암호화하는 동안 암호화 된 문자열에 이상한 문자가 나타납니다. 어떤 생각? –
새 질문을 만들고 코드 샘플을 게시하고 링크를 주석으로 추가하십시오. 나는 그것을 살펴볼 것이다. – futureelite7
여기에 m_oCert 란 무엇입니까? – HPM