Данные между маркерами являются кодированием base64 DER-кодирования ASN.1 PKCS#8 PublicKeyInfo, содержащего PKCS#1 RSAPublicKey.
, Который является большим количеством стандартов, и Вы будете лучше всего обслуживаться с использованием crypto-библиотеки для декодирования его (такие как M2Crypto как предложенный joeforker). Рассматривайте следующее как некоторую забавную информацию о формате:
, Если Вы хотите, можно декодировать его как это:
Base64-декодируют строку:
30819f300d06092a864886f70d010101050003818d0030818902818100df1b822e14eda1fcb74336
6a27c06370e6cad69d4116ce806b3d117534cf0baa938c0f8e4500fb59d4d98fb471a8d01012d54b
32244197c7434f27c1b0d73fa1b8bae55e70155f907879ce9c25f28a9a92ff97de1684fdaff05dce
196ae76845f598b328c5ed76e0f71f6a6b7448f08691e6a556f5f0d773cb20d13f629b6391020301
0001
Это - DER-кодирование:
0 30 159: SEQUENCE {
3 30 13: SEQUENCE {
5 06 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
16 05 0: NULL
: }
18 03 141: BIT STRING 0 unused bits, encapsulates {
22 30 137: SEQUENCE {
25 02 129: INTEGER
: 00 DF 1B 82 2E 14 ED A1 FC B7 43 36 6A 27 C0 63
: 70 E6 CA D6 9D 41 16 CE 80 6B 3D 11 75 34 CF 0B
: AA 93 8C 0F 8E 45 00 FB 59 D4 D9 8F B4 71 A8 D0
: 10 12 D5 4B 32 24 41 97 C7 43 4F 27 C1 B0 D7 3F
: A1 B8 BA E5 5E 70 15 5F 90 78 79 CE 9C 25 F2 8A
: 9A 92 FF 97 DE 16 84 FD AF F0 5D CE 19 6A E7 68
: 45 F5 98 B3 28 C5 ED 76 E0 F7 1F 6A 6B 74 48 F0
: 86 91 E6 A5 56 F5 F0 D7 73 CB 20 D1 3F 62 9B 63
: 91
157 02 3: INTEGER 65537
: }
: }
: }
Для ключа RSA на 1 024 бита, можно рассматривать "30819f300d06092a864886f70d010101050003818d00308189028181"
как постоянный заголовок, сопровождаемый на 00 байтов, сопровождаемых на 128 байтов модуля RSA. После этого 95% времени Вы доберетесь 0203010001
, который показывает общедоступную экспоненту RSA 0x10001 = 65537.
можно использовать те два значения в качестве n
и e
в кортеже для построения RSAobj.
Whether you are on an iPhone or a iPod Touch:
UIDevice *device = [UIDevice currentDevice];
NSString *systemName = [device systemName];
To detect the version of the OS:
UIDevice *device = [UIDevice currentDevice];
NSString *systemVersion = [device systemVersion];
To detect a specific model, you would need to test for some capability that only that model has, so to detect an iPhone 3GS, check for a video capability on the camera:
#define SOURCETYPE UIImagePickerControllerSourceTypeCamera
// does the device have a camera?
if ([UIImagePickerController isSourceTypeAvailable:SOURCETYPE]) {
// if so, does that camera support video?
NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:SOURCETYPE];
bool isA3GS = [mediaTypes containsObject:kUTTypeMovie];
}
Из файла UIDevice.h:
[[UIDevice currentDevice] name] // e.g. "My iPhone"
[[UIDevice currentDevice] model] // e.g. @"iPhone", @"iPod Touch"
[[UIDevice currentDevice] localizedModel] // localized version of model
[[UIDevice currentDevice] systemName] // e.g. @"iPhone OS"
[[UIDevice currentDevice] systemVersion] // e.g. @"2.0"
[[UIDevice currentDevice] uniqueIdentifier] // a string unique to each device based on various hardware info.
Вот класс, написанный Эрикой Садун, который предоставляет обширные возможности для этого:
http://github.com/erica/uidevice-extension/blob/master/UIDevice-Hardware.m
Ознакомьтесь с остальной частью репозитория - есть еще несколько классов, которые подтвердят чтобы быть действительно полезным для детализированных запросов к устройствам.