我尝试使用有用的JavaScript库JSBN,如this post中所述。
基本上,我想建立一个系统,我使用这个库(在客户端)使用公钥加密,然后使用PHP和私钥在服务器端解密。
我目前有一个主要问题:在实现和尝试我见过的示例中使用的完全相同的代码之后,基本openssl_pkey_get_details
函数返回了奇怪的结果。我使用RSA,4096位,' sha512'对于我的公钥,我也使用了我见过其他人在他们的例子中使用的不同类型的密钥。
这是在我的JustHost服务器上运行时产生的openssl_pkey_get_details
输出类型:
Array
(
[bits] => 4096
[key] => -----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEArLEG2TvFVWV7b5N3ICvN
tdW8/rF8P2lOLpWuA+yPlia1XVoohKl/UIkCrJUF6aS1d1KPbUa00uskWuH6TGSi
+A4B3/PWO9MGH2CklHnjeblYF7shGz6zwGK7wtQxpN67j3nOKBvegRolk6FCidTt
JcFB4+DEfn/avwL6PxLRJYvMoUgHqCQCwh6frIUiwzYttpHB0aOQaSpc4/vXKElq
C4FAmEGfmhlofHB3b3bnz+fYKyzbCkek51NqMFK4e7Gvek3uSKyzXKKD6LQQcXyT
/lxvvXWTb3qkoRzZNdrsAVbmIRLBQfYvHkcFQolh/D7WAVd59S+/vhsf+rDfq42O
Sh4J1ph7dBpcyhzIoNoioCh3SU9fd1mwNG51PFU3AmFUmWPMeuYI47g7Sx+amc0R
nITC60E4hdvr2H8OO0FGk0nxlVPulVwWT7OfcV4xFU2wLdKawq+ErQwkQWTMh+V+
rRDKBiFjQPbgRop7EzYlEA6H92KfI/g7mNMVDoUFd6HBF9Hdr2yF1A8N0nfmoHJ7
q0FDJS/0ZYTnF7r82EBU6PuX1y0r2T9gGh6WQf8c1FvprvPQMz9/UXuyPDJqRfRq
pWopF53l60yrrpG7LZpo2NyL1TaVeOLlB8rwSeYrPQn6WBpzIf7FxThJPKMqy8EP
OaJ5DkVyRGP6tqhH75hlHCUCAwEAAQ==
-----END PUBLIC KEY-----
[type] => 0
)
注意,type
以0
的形式返回;这应该意味着类型确实是RSA密钥。根据{{3}},应该是这样的:在type
之上,应该有另一个元素rsa
,其中包含n
和e
值。使用JSBN创建RSAKey
对象需要这些值,我无法访问它们。
以下是我的一些源代码:
$config = array(
"digest_alg" => , 'sha512'
"private_key_bits" => 4096,
"private_key_type" => OPENSSL_KEYTYPE_RSA
);
// Create the private and public key
$resource = openssl_pkey_new($config);
// Place the private key into $pk
openssl_pkey_export($resource, $pk);
$kh = openssl_pkey_get_private($pk);
$details = openssl_pkey_get_details($kh);
print_r($details);
答案 0 :(得分:0)
与php 5.2.17相同的问题(在CLI中:php -v),OS Linux,OpenSSL 1.0.1e-fips 2013年2月11日。
@php 5.3.14一切正常并存在$ details ['rsa']:OS Windows,OpenSSL 1.0.1g 2014年4月7日,也适用于@ PHP 5.3.3,OS Linux,OpenSSL 1.0.1f 2014年1月6日
所以,也许问题与openssl版本有关
openssl version
低于2014年1月6日的1.0.1f 或PHP版
php -v
低于5.3。
<强> UPD:强> 不要使用OS Linux和OpenSSL 1.0.1f返回['rsa'] @php 5.2.17 2014年1月6日。
所以,我的结论是你的服务器在PHP下运行&lt; 5.3.0。
这是对的吗?