2012-01-17 3 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 

Чем я пытался изменить в TripleDES.php линии 255 от

define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT); 

в

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

ответ

0

$ rsa-> setPassword() следует вызывать перед $ rsa-> loadKey().

Кроме того, CRYPT_DES_MODE_3CBC не является допустимым режимом подписи. Тот факт, что секретный ключ является зашифрованным ключом, будет автоматически обнаружен phpseclib из-за строки DEK-Info: DES-EDE3-CBC, A3CEE9AD263E2C7F в закрытом ключе. Допустимыми параметрами для $ rsa-> setSignatureMode() являются CRYPT_RSA_SIGNATURE_PSS и CRYPT_RSA_SIGNATURE_PKCS1.

Смежные вопросы