Генерируйте подпись RSA DES3 с помощью phpseclib - PullRequest
0 голосов
/ 17 января 2012

Закрытый ключ:

-----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);

Для включения внутреннего режима. Но во внутреннем режиме я получаю эту ошибку:

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

Скажите пожалуйста, что не так? Спасибо.

1 Ответ

0 голосов
/ 18 января 2012

$ 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.

...