Невозможно прочитать QR-код с символами ASCII, используя AVFoundation - PullRequest
0 голосов
/ 23 мая 2018
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection{
unsigned char myKey[2];
myKey[0]=1;
myKey[1]=2;
if(metadataObjects == nil  || [metadataObjects count] ==0)
{
    qrCodeFrameView.frame=CGRectZero;
}
if (metadataObjects != nil && [metadataObjects count] > 0) {
    AVMetadataMachineReadableCodeObject *metadataObj = [metadataObjects objectAtIndex:0];
    if ([[metadataObj type] isEqualToString:AVMetadataObjectTypeQRCode]) {
        Encoder *encoder=[[Encoder alloc] init];
        NSLog(@"0000-----%@",[metadataObj stringValue]);
        unsigned char buffer_to_decrypt=[metadataObj stringValue];
        [encoder tripledes_decrypt:buffer_to_decrypt lenght:sizeof(buffer_to_decrypt) key:myKey];
        NSData *data = [NSData dataWithBytes:buffer_to_decrypt length:sizeof(buffer_to_decrypt)];
        NSLog(@"data = %@", data);
        NSString *result=[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"-----<<<<result>>>>%@",result);
        AVMetadataMachineReadableCodeObject *barCodeObj=(AVMetadataMachineReadableCodeObject *)[_videoPreviewLayer transformedMetadataObjectForMetadataObject:metadataObj];
        qrCodeFrameView.frame=barCodeObj.bounds;
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
        [self stopReading];
        _isReading = NO;
    }
}}

Здесь я могу читать обычные QR-коды.Но [metadataObj stringValue] возвращает ноль при чтении символов ASCII из QR-кода.Я использую это для шифрования данных в QR-коде, так что только мое приложение может прочитать мой QR-код.Как я могу прочитать символы ASCII?это мой зашифрованный QR-код изображение QR-кода

1 Ответ

0 голосов
/ 24 мая 2018

Меня не удивит, что Apple SDK преобразуется только с использованием кодировки UTF8.

После загрузки приложения в старом iTunes и его изучения я обнаружил ссылки на ZXingObjc и ZBarSDK, которые, как мне кажется,используются для чтения QRCode, что объясняет, почему приложение может его читать, а ваше - нет.

Таким образом, вы можете использовать эту стороннюю библиотеку или, если вы хотите продолжать использовать библиотеку Apple, здесьЭто возможное решение:

NSString <=> EncryptedString <=> Base64EncryptedString <=> QRCode

Или подождите, пока Apple выдаст вместо [metadataObj stringValue], [metadataObj stringValueUsingEncoding:] или [metadataObj rawData] (что вы можете использовать после [[NSString alloc] initWithData:[metadataObj rawData] encoding:NSASCIIEncoding]).

...