2014-03-24 35 views
0

我已經搜索到了這些問題的答案。但是我無法找到適合我的問題的解決方案,因爲許多答案都是針對相關問題的。openssl_sign():提供的密鑰參數不能被強制轉換成私鑰

當我試圖創建內容的數字簽名使用XMLSecurityKeyopenssl_sign我收到警告和簽名沒有創建。

openssl_sign拋出錯誤爲:

Warning: openssl_sign(): supplied key param cannot be coerced into a private key in /var/www/git/ta_client/accessService.php on line 105 

而且我的代碼是:

public function _signMessage($encData, $configValues) 
    { 
$decode = 'decode'; 
    $token = $encData['token']; 
    $cipherValue = $encData['cipherValue']; 
    $clientId = $encData['ClientId']; 
    $grpCustNum = $encData['grpCustNum']; 

    // Sign the concatenated string 
    $toSign = $token . $cipherValue . $clientId . $grpCustNum; 

    // Encrypt the token with the public key from vendor 
    $cipher = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type'=>'private')); // Reference to XMLSecLibs 
    $cipher->loadKey($configValues['privkey'], true); 
    try{ 
    if (! openssl_sign ($toSign, $signature, $cipher->key, OPENSSL_ALGO_MD5)) { 
     openssl_error_string(); 
     throw new Exception(); 
    } 
    }catch(Exception $e){ 
    print_r($e); 
    die; 
} 
    // append the decode values 
    $encData['sign'] = urlencode(base64_encode($signature)) . $decode; 
    $encData['token'] = urlencode($token) . $decode; 
    $encData['cipherValue'] = urlencode($cipherValue) . $decode; 

    return $encData; 
} 

而且我$configValues['privkey']是XML format.Any建議?

回答

2

openssl不支持XML格式。我的建議是使用phpseclib。即。

<?php 
include('Crypt/RSA.php'); 

$rsa = new Crypt_RSA(); 
$rsa->loadKey('...'); // private key 

$plaintext = '...'; 

$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1); 
$signature = $rsa->sign($plaintext); 

我假設你正在嘗試加載私鑰是這種格式?:

<RSAKeyValue> 
    <Modulus>AKoYq6Q7UN7vOFmPr4fSq2NORXHBMKm8p7h4JnQU+quLRxvYll9cn8OBhIXq9SnCYkbzBVBkqN4ZyMM4vlSWy66wWdwLNYFDtEo1RJ6yZBExIaRVvX/eP6yRnpS1b7m7T2Uc2yPq1DnWzVI+sIGR51s1/ROnQZswkPJHh71PThln</Modulus> 
    <Exponent>AQAB</Exponent> 
    <P>AN4DDp+IhBca6QEjh4xlm3iexzLajXYrJid6vdWmh4T42nar5nem8Ax39o3ND9b1Zoj41F9zFQmuZ8/AgabreKU=</P> 
    <Q>AMQi+R0G9m0K+AcqK3DFpv4RD9jGc0Tle98heNYT7EQvZuuiq4XjvRz0ybqN//bOafrKhsTpRS9DQ7eEpKLI4Bs=</Q> 
    <DP>FklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5kX6zk7S0ljKtt2jny2+00VsBerQ==</DP> 
    <DQ>AJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2eplU9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhM=</DQ> 
    <InverseQ>EaiK5KhKNp9SFXuLVwQalvzyHk0FhnNZcZnfuwnlCxb6wnKg117fEfy91eHNTt5PzYPpf+xzD1FnP7/qsIninQ==</InverseQ> 
    <D>Fijko56+qGyN8M0RVyaRAXz++xTqHBLh3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxE=</D> 
</RSAKeyValue> 
+0

ya.My私鑰具有相同的格式。感謝您的回覆。 – stefun

0

會,如果您使用的是畸形的私鑰或試圖生成同樣的錯誤使用公鑰標記...