Чтение зашифрованных данных из iDynamo Reader в Objective-C - PullRequest
2 голосов
/ 12 мая 2011

Кто-нибудь знает опыт работы с iDynamo Reader ? Этот читатель использует DES-CBC для шифрования данных карты. Кто-нибудь знает, как расшифровать эти данные?

Большое спасибо за ваше время.

1 Ответ

1 голос
/ 28 марта 2012

Извините, если это слишком поздно, но может помочь кому-то еще. Таким образом, решение - связаться с Magtek. Если вы покупаете устройство Magtek, попросите у них lib. Я получил libDS247.a от Magtek. Затем импортируйте DS247.h в свой код, внедрите DS247Delegate. Я привожу здесь образец для вас -

(void)deviceDidConnect
{   
if (theAlertView.visible) 
    [theAlertView dismissWithClickedButtonIndex:0 animated:NO]; 
}

- (void)deviceDidDisconnect
{
theAlertView = [[UIAlertView alloc] initWithTitle:@"Hardware Not Connected!"
                                                 message:@"Please connect the device."
                                             delegate:self 
                                cancelButtonTitle:nil otherButtonTitles:nil];
[theAlertView show];    
[theAlertView release];
}

- (void)magneticCardReadStart
{
read = YES;
[self.tableView reloadData];
}

- (void)magneticCardReadDidFinish:(NSString *)cardString
{
read = NO;

if (trackMode == 67)
{
    NSString *string = [cardString substringWithRange:NSMakeRange(6,20)];
    self.pan1 = [[string componentsSeparatedByString:@"^"] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(7+pan1.length,27)];
    self.name = [[string componentsSeparatedByString:@"^"] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(8+pan1.length+name.length,4)];
    self.ed1 = string;

    self.ed2 = @"";
    self.pan2 = @"";        
}
if (trackMode == 68)
{
    NSString *string = [cardString substringWithRange:NSMakeRange(5,20)];
    self.pan2 = [[string componentsSeparatedByString:@"="] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(6+pan2.length,4)];
    self.ed2 = string;

    self.ed1 = @"";
    self.name = @"";
    self.pan1 = @"";

}
if (trackMode == 69 || trackMode == 70)
{
    NSString *string = [cardString substringWithRange:NSMakeRange(7,20)];
    self.pan1 = [[string componentsSeparatedByString:@"^"] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(8+pan1.length,27)];
    self.name = [[string componentsSeparatedByString:@"^"] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(9+pan1.length+name.length,4)];
    self.ed1 = string;

    string = [cardString substringWithRange:NSMakeRange(83,20)];
    self.pan2 = [[string componentsSeparatedByString:@"="] objectAtIndex:0];

    string = [cardString substringWithRange:NSMakeRange(84+pan2.length,4)];
    self.ed2 = string;      
}
if (trackMode == 71)
{
    self.ed1 = @"";
    self.ed2 = @"";
    self.pan1 = @"";
    self.pan2 = @"";
    self.name = @"";        
}

[self.tableView reloadData];
}

По умолчанию для trackMode должно быть установлено значение 67, а cardString представляет собой необработанные данные карты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...