2016-09-22 33 views
0

即時新PHP加密和即時通訊使用openssl做密碼操作。 Openssl Rsa是需要PEM格式,但我有十六進制模數(n),私人指數(d)和公開指數(e)。 如何從這些組件生成私鑰? 對不起,我的英語。如何從PHP中的指數,模數和私有指數獲取私鑰?

+1

你有一些鏈接到你認爲有用/已檢查的信息?請將它們添加到您的問題。 –

+0

http://nmichaels.org/rsa.py 例如,上面的站點正在獲取n,e,d組件並執行rsa crypt操作。 我很好奇,他/她如何從這3個組件獲得私鑰解密? –

+0

@ MuhammedN.Kartal - 你可以用n和d做解密,但它不會像它那樣高效,因此爲什麼現實世界的實現使用額外的CRT參數。真實RSA實現和教科書RSA實現可以做不同的事情。教科書-RSA實現另一件事是不做的:填充。教科書-RSA實現受明確的明文攻擊(除其他外)在課堂上並不是真正的問題,因爲教室的目標是給你/一般/想法。 – neubert

回答

0

RSA私鑰通常也有一堆其他參數。用於創建模數(p和q)和其他參數的素數便於使用中國剩餘定理來加速解密。如果你沒有,那麼我只是創建一個公鑰。您可能可以用PRIVATE idk替換PUBLIC。

總之,這裏的一些代碼(使用phpseclib 1.0.3):

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

$rsa = new Crypt_RSA(); 
$rsa->loadKey([ 
    'e' => new Math_BigInteger('...'), // base-10 by default 
    'n' => new Math_BigInteger('...') // base-10 by default 
]); 

echo $rsa; 

我用15作爲E和N(這實際上不是RSA目的的有效組合,但用於演示目的是罰款),並得到這回:

-----BEGIN PUBLIC KEY----- 
MBowDQYJKoZIhvcNAQEBBQADCQAwBgIBDwIBDw== 
-----END PUBLIC KEY----- 
+0

非常感謝您的回答。我之前得到了這個代碼,我的想法和你一樣, (http://nmichaels.org/rsa.py) 但在上面的網站做了rsa enc/dec只有3個組件。 不知何故,他/她從十六進制n,e,d組件獲取私鑰並使用它們解密數據。 –

+0

@ MuhammedN.Kartal - 就像我說過的,你可以重命名BEGIN PUBLIC KEY來開始私鑰。 http://stackoverflow.com/a/21289989/569976討論了RSA私鑰格式。請注意,素數和CRT參數不是可選的。 otherPrimeInfos是可選的,它用於兩個以上素數的RSA私鑰。 – neubert

+0

我會讀這個關於私鑰格式的討論。非常感謝。 –

相關問題