2012-01-17 31 views
-1

私鑰生成RSA簽名DES3:使用phpseclib

-----BEGIN RSA PRIVATE KEY----- 
Proc-Type: 4,ENCRYPTED 
DEK-Info: DES-EDE3-CBC,A3CEE9AD263E2C7F 

td8ySvosoIOBjoZMxA5rnr//1YoZsyReia9P9xJVXf1D+ime68AFTEf0A+is9whB 
9dthPGhJ3SiOBrFZICNuFZrPmXtrw0T5VoJHs3I71yHIclgKA6AMKYVwUBfzdwLL 
1RKwkGeZI7nkXTCmG1ZF0pa0v6CmWinZCv6capTF8WVEwTxggvOyxbCqltkVsDyV 
cO5j2zZhhqIP+/peMxzTs7lqsWIhHgohsCPAVsBp8fFyuu1I6RUSgVANzjkN4K+k 
sQ1+l7oJKJh4FnzWNaj0VMwNPGXastA97TSTmqciSUohb6yUOArFZUxIQ9o9mH8c 
P4ajkmLrYOUcwA1+e9QPTTeQko2wF3Lla1a57Wq8zLIjexsF2E5klkBUCopyeBOL 
p8MgmB18k9/43W45v4fQZjojRyn07Q+Wu25tTdqC00GFDCzH2CR7p9O+Uc67SjcB 
4FqKjLez9QwJbPoZvdAhjbiarV251eoXwq2RtHv7teH8S629x/9vGryUNnNHw5mJ 
2XPiIWWW/y/lIw3e1GIRsNm8cW2KSkB9pYHGbVEwEjCp1ozFsTLockjpMpqVvHET 
l4XVYhQx6RXQQx8NkofwYBSlqI7KvbCSPDxPhLDe6vY0aPITFmmevEL5SY7qb6QU 
5Yj2blmA9UxDMqsAfWQZrTonwa1NiYzh0FAc+kPb0cUOWkP3EMfmVvY8fLtJ7Y+w 
C5cWO24j8k1E5KNr8kYuT2tKfMNB3V5hL35Dq1XZNYvXbT167+wDWjiaSwZuQQKi 
eFJoqj0nHLkGzdgrPifxNyoP4IqZ28sdOcYHfN/EQZFNEKy0DlujOg== 
-----END RSA PRIVATE KEY----- 

和字符串:

eyJhZ2VudCI6InBsYWFheS10ZXN0IiwidGltZXNhbHQiOjEzMjY4MTUxMDgsImFjdGlvbiI6InRlc3QiLCJ2ZXJzaW9uIjoiMS4wLjEiLCJpZCI6MX0= 

我需要生成簽名,以該字符串。 代碼:

$xpacket = eyJhZ2VudCI6InBsYWFheS10ZXN0IiwidGltZXNhbHQiOjEzMjY4MTUxMDgsImFjdGlvbiI6InRlc3QiLCJ2ZXJzaW9uIjoiMS4wLjEiLCJpZCI6MX0=; 

include('Crypt/RSA.php'); 
$rsa = new Crypt_RSA(); 
$rsa->loadKey(file_get_contents('private_rsa'), CRYPT_RSA_PUBLIC_FORMAT_PKCS1); //tryied any format there 
$rsa->setSignatureMode(CRYPT_DES_MODE_3CBC); 
$rsa->setPassword('my_password'); 
$signature = $rsa->sign($xpacket); // 
echo $signature; 

首先我會收到此錯誤:

Warning: mcrypt_generic_init() [function.mcrypt-generic-init]: Key size too large; supplied length: 26, max: 24 in /var/www/u2113183/data/www/plaaay.ru/api/Crypt/TripleDES.php on line 708 

比我試圖從

define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); 

在TripleDES.php線255更改爲

define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL); 

要強制inte rnal模式。但在內部模式,我收到錯誤:

Warning: unpack() [function.unpack]: Type N: not enough input, need 4, have 2 in /var/www/u2113183/data/www/plaaay.ru/api/Crypt/DES.php on line 1047 

請告訴我,什麼是錯的? 謝謝。

+0

您分配'$ xpacket'的代碼行缺少兩件重要的事情。我認爲你的錯誤報告可能偏低。請添加'error_reporting(-1);'並重試。 – Charles 2012-01-17 19:34:12

回答

0

$ rsa-> setPassword()應該在$ rsa-> loadKey()之前調用。

此外,CRYPT_DES_MODE_3CBC不是有效的簽名模式。由於私鑰中的DEK-Info:DES-EDE3-CBC,A3CEE9AD263E2C7F行,私鑰是加密密鑰的事實將由phpseclib自動檢測。 $ rsa-> setSignatureMode()的有效參數是CRYPT_RSA_SIGNATURE_PSS和CRYPT_RSA_SIGNATURE_PKCS1。