Кодировка S / MIME обычно работает следующим образом:
- Генерация случайного ключа
- Зашифруйте ваш открытый текст, используя этот случайный ключ и симметричный шифр (например, AES или triple-DES)
- Зашифруйте случайный ключ с помощью открытого ключа получателя и асимметричного шифра (например, RSA)
Вы можете использовать команду типа "openssl asn1parse", чтобы лучше понять внутреннюю структуру этих сообщений, например ::
$ openssl asn1parse < blah.txt
Где blah.txt содержит выходные данные S / MIME, за исключением заголовков MIME (т. Е. Начинается с "MIAGCSq ..."). Делая это, вы получаете:
...
196:d=6 hl=2 l= 9 prim: OBJECT :rsaEncryption
207:d=6 hl=2 l= 0 prim: NULL
209:d=5 hl=4 l= 256 prim: OCTET STRING [HEX DUMP]:08BB24600D266B784171CC0E6A6875E3F6F65EA4429816A41B13CC75014CA22432E3B52F18B438426AEE394D4CBF9DF4AF78E09715597760CD5F97C13F01C9F75391537F411A7B3606759D139CFCC87E4AAF579D8C4AE3FC4651CC9154D50CAAEBFB819F75B85FDFA3361B9659C3EBC6840EA1086B134BC44E7BF87596F989CD6260B58EADA4B09D09AF38B82B87D88226EABA9FD11617F60725E9444CA4123B64673EF6E97AC1CB819E3C9E01A40C7F85594D10655F8B5E6ABCC697692D6C4C01E874ED6214CF4B00D6891814C0A4DAECB9B20EE8BF23BCD3869E01B6655F3F1A0DEA0C306CCE7CD8B63F16316F047039B04E8F6731534A8C42EE3D96022126
469:d=3 hl=2 l=inf cons: SEQUENCE
471:d=4 hl=2 l= 9 prim: OBJECT :pkcs7-data
482:d=4 hl=2 l= 20 cons: SEQUENCE
484:d=5 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
494:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:D5288E1B909F9EBC
504:d=4 hl=2 l=inf cons: cont [ 0 ]
506:d=5 hl=2 l= 24 prim: OCTET STRING [HEX DUMP]:F933A96AF388E6C01E278136920A3066E8C7163CA224CC20
532:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:4E8686C88D083067
...
из вашего хорошего вывода и:
...
196:d=6 hl=2 l= 9 prim: OBJECT :rsaEncryption
207:d=6 hl=2 l= 0 prim: NULL
209:d=5 hl=3 l= 252 prim: OCTET STRING [HEX DUMP]:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
464:d=3 hl=2 l=inf cons: SEQUENCE
466:d=4 hl=2 l= 9 prim: OBJECT :pkcs7-data
477:d=4 hl=2 l= 20 cons: SEQUENCE
479:d=5 hl=2 l= 8 prim: OBJECT :des-ede3-cbc
489:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:00C9F0DF111FAB51
499:d=4 hl=2 l=inf cons: cont [ 0 ]
501:d=5 hl=2 l= 24 prim: OCTET STRING [HEX DUMP]:BB6A69A3361DF3AF40990F14636A55DC9B10B9A886D6B285
527:d=5 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:E09B48E196386716
...
на вашем плохом выходе. Таким образом, это говорит о том, что все эти буквы «А» в вашем выводе должны быть ключами, зашифрованными RSA, поэтому шифрование RSA каким-то образом дает сбой.
Однако, не зная больше о вашем коде, трудно сказать точно, что происходит не так. Как выстрел в темноте, я бы сказал, что вы не забыли вызвать OpenSSL_add_all_algorithms () (или что-то для достижения той же цели), но вы, вероятно, уже сделали, в противном случае ваш код, скорее всего, не будет работать везде, не только на iOS ...