Массив C char name[8]
импортируется в Swift как кортеж:
(Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)
Адрес name
совпадает с адресом name[0]
, а Swift сохраняет макет памяти структур, импортированных из C, как , подтвержденного инженером Apple Джо Гроффом:
... Вы можете оставить структуру, определенную на C, и импортировать ее в Swift. Swift будет уважать макет C.
Как следствие, мы можем передать адрес
record.name
, преобразованный в указательUInt8
, в инициализатор строки:var record = someFunctionReturningAStructRecord() // Swift 2: let name = withUnsafePointer(&record.name) { String.fromCString(UnsafePointer($0))! } // Swift 3: let name = withUnsafePointer(to: &record.name) { $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size(ofValue: record.name)) { String(cString: $0) } }
ПРИМЕЧАНИЕ: Предполагается, что байты в
name[]
являются допустимой последовательностью UTF-8 с NUL-концами.
Я не знаю, в чем проблема.
Возможно, вы забыли создать (или извлечь) открытый ключ из закрытого ключа.
Но проверьте следующие шаги:
1) сгенерировать закрытый ключ:
openssl genrsa -out private.pem 2048
2) извлечь открытый ключ из закрытого ключа:
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
3) и пример php-кода:
<?php
require_once('vendor/autoload.php');
use \Firebase\JWT\JWT;
$privateKey = file_get_contents('./private.pem');
$publicKey = file_get_contents('./public.pem');
$payload = [
'data' => ['field1' => 1, 'field2' => 'string data'],
"iss" => "http://example.org",
"aud" => "http://example.com",
"iat" => 1531498466,
"eat" => 1557000000
];
$token = JWT::encode($payload, $privateKey, 'RS256');
echo "Token:\n" . print_r($token, true) . "\n";
$decoded = JWT::decode($token, $publicKey, ['RS256']);
$decoded_array = (array) $decoded;
echo "Decoded:\n" . print_r($decoded_array, true) . "\n";