【发布时间】:2018-05-25 01:40:12
【问题描述】:
-(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 码读取 ASCII 字符时,[metadataObj stringValue] 返回 nil。我用它来加密二维码中的数据,这样只有我的应用程序才能读取我的二维码。如何读取 ASCII 字符? 这是我的加密二维码QR Code image
【问题讨论】:
-
下载了你使用的可以阅读的应用程序(QR Bot)后,它似乎使用了
ZBarSDK&ZXingObjc。我想这就是使它起作用的那个。 Apple 的只读 UTF8 不会让我感到惊讶。所以一个解决方案可能是base64转换它?然后它应该是 UTF8 兼容的,并且可以再次根据您的需要进行翻译(转换为加密的,然后您使用所需的编码 ASCII 进行解码)。 -
是的,它成功了,非常感谢@Larme !!!现在我很欣赏 base64 :-)
标签: objective-c qr-code