Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#rsacyptoserviceprovider.FromXmlString的pem rsa密钥转换为xml_C#_Php_Xml_Rsa - Fatal编程技术网

将C#rsacyptoserviceprovider.FromXmlString的pem rsa密钥转换为xml

将C#rsacyptoserviceprovider.FromXmlString的pem rsa密钥转换为xml,c#,php,xml,rsa,C#,Php,Xml,Rsa,我使用PHP生成RSA公钥和私钥: function genKeys($pkey, $skey) { $pkGenerate = openssl_pkey_new(array( 'private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA )); $pkGeneratePrivate = null; openssl_pkey_export($

我使用PHP生成RSA公钥和私钥:

function genKeys($pkey, $skey)
{
    $pkGenerate = openssl_pkey_new(array(
        'private_key_bits' => 2048,
        'private_key_type' => OPENSSL_KEYTYPE_RSA
    ));

    $pkGeneratePrivate = null;
    openssl_pkey_export($pkGenerate, $pkGeneratePrivate);

    $pkGenerateDetails = openssl_pkey_get_details($pkGenerate);
    $pkGeneratePublic  = $pkGenerateDetails['key'];

    openssl_pkey_free($pkGenerate);

    $pkImport        = openssl_pkey_get_private($pkGeneratePrivate);
    $pkImportDetails = openssl_pkey_get_details($pkImport);
    $pkImportPublic  = $pkImportDetails['key'];

    openssl_pkey_free($pkImport);

    $result = (bool) strcmp($pkGeneratePublic, $pkImportPublic);

    if ($result) {
        file_put_contents($pkey, $pkGeneratePrivate);
        file_put_contents($skey, $pkGeneratePublic);
    }

    return $result;

}
我需要和RSACryptServiceProvider一起使用PEM文件

那么,如何将PEM public和private转换为XML?

使用:


这个答案有点晚了,我很难准确理解您要找的是什么,现在就可以破译了

RSACryptServiceProvider.FromXmlString中的.Net使用类似于的XML密钥格式,只是使用了不同的文档元素

PHP中的openssl扩展不提供直接创建它的函数,但在的帮助下,您可以获得创建XML文件所需的RSA密钥的所有详细信息。那就很直截了当了:

$rsa = openssl_pkey_get_details($pkGenerate)['rsa'];

$xml = new SimpleXMLElement("<RSAKeyValue/>"); // Use <RSAKeyPair/> for XKMS 2.0

// .Net / XKMS openssl RSA indecies to XML element names mappings
$map = ["n"    => "Modulus", "e"    => "Exponent", "p"    => "P",        "q"    => "Q",
        "dmp1" => "DP",      "dmq1" => "DQ",       "iqmp" => "InverseQ", "d"    => "D",];

foreach ($map as $key => $element) {
    $xml->addChild($element, base64_encode($rsa[$key]));
}

$xml->asXML('php://output');
或将其赋值为变量:

$xmlString = $xml->asXML();
因此,从技术上讲,如果您使用的是openssl扩展,就不需要添加完整的phpseclib来创建XML

相关材料:

  • (爪哇)

您能解释一下在您的问题中使用strcmp
的原因吗?当我运行代码时,
$pkGeneratePrivate
$pkGeneratePublic
是相同的。
$xml->asXML('/path/to/file');
$xmlString = $xml->asXML();