Шифрование RSA: Java к PHP

Я хотел бы отметить, что в Windows XP SP3 НЕ установлен .NET Framework 3.5 (полный профиль). Я только что узнал и испугался: -0

7
задан user201117 2 November 2009 в 18:07
поделиться

2 ответа

Вам необходимо преобразовать двоичный формат (DER) из Java в PEM для OpenSSL (и привязок PHP). Вы можете протестировать файлы ключей Java с помощью командной строки OpenSSL, указав в ней параметр -inform DER .

<?
function pem2der($pem_data) {
  $begin = "KEY-----";
  $end   = "-----END";
  $pem_data = substr($pem_data, strpos($pem_data, $begin)+strlen($begin));
  $pem_data = substr($pem_data, 0, strpos($pem_data, $end));
  $der = base64_decode($pem_data);
  return $der;
}

function der2pem($der_data) {
  $pem = chunk_split(base64_encode($der_data), 64, "\n");
  $pem = "-----BEGIN PUBLIC KEY-----\n".$pem."-----END PUBLIC KEY-----\n";
  return $pem;
}

// load the public key from a DER-encoded file
$pubkey = der2pem(file_get_contents("pubkey"));
?>

Для получения дополнительной информации об использовании ключей OpenSSL в Java перейдите по этой ссылке .

11
ответ дан 6 December 2019 в 10:51
поделиться

Для функций PHP требуются ключи в кодировке PEM. Преобразовать ключи, закодированные в DER, в PEM - тривиально.

Вот мой код для преобразования закрытого ключа PKCS # 8 в PEM,

function pkcs8_to_pem($der) {

    static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";
    static $END_MARKER = "-----END PRIVATE KEY-----";

    $value = base64_encode($der);

    $pem = $BEGIN_MARKER . "\n";
    $pem .= chunk_split($value, 64, "\n");
    $pem .= $END_MARKER . "\n";

    return $pem;
}

Для открытого ключа в X509 замените PRIVATE на PUBLIC в маркерах.

5
ответ дан 6 December 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: