2013-08-16 79 views
0

我使用phpseclib代替RSA加密http://phpseclib.sourceforge.net/php rsa加密函數什麼都不返回

這是我的PHP代碼:

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


$message="123456"; 
$private_modulus = "272435F22706FA96DE26E980D22DFF67"; 
$private_exponent = "158753FF2AF4D1E5BBAB574D5AE6B54D"; 

$rsa = new Crypt_RSA(); 

$message = new Math_BigInteger(base64_decode($message), 256); 
$private_modulus = new Math_BigInteger(base64_decode($private_modulus), 256); 
$private_exponent = new Math_BigInteger(base64_decode($private_exponent), 256); 


$rsa->loadKey(array('n' => $private_modulus, 'e' => $private_exponent)); 
$encryptedText=$rsa->encrypt($message); 
echo $encryptedText; 

然而,encryptedText是空白。任何幫助?

+0

RSA密鑰對我而言有點奇怪。你從哪裏得到這個例子?是的,'$ encryptedText'不是空白,它是'FALSE'。 –

回答

0

您在公鑰/私鑰方面存在一些問題。通過功能$rsa->loadKey()評論看,第一個參數是字符串,但您分配一些怪陣......工作加密的

/** 
* Loads a public or private key 
* 
* Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed) 
* 
* @access public 
* @param String $key 
* @param Integer $type optional 
*/ 
function loadKey($key, $type = false) 

例/解密隨機公鑰/私鑰:

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

$rsa = new Crypt_RSA(); 
extract($rsa->createKey()); 

# encrypt 
$message = '123456'; 
$rsa->loadKey($publickey); 
$ciphertext = $rsa->encrypt($message); 
var_dump($ciphertext); 

# decrypt 
$rsa->loadKey($privatekey); 
var_dump($rsa->decrypt($ciphertext)); 

有關更多信息,請參見documentation

+0

儘管文檔沒有真正提到它,但它看起來像phpseclib可以支持原始RSA密鑰的格式,OP正在嘗試使用它們。例如,請參閱'CRYPT_RSA_PUBLIC_FORMAT_RAW'。 – neubert

+0

真的,我剛剛查看了下一個方法'function _parseKey($ key,$ type)',其中'$ key'仍然被標記/註釋爲字符串,但也被用作此方法中的數組。 –

0

當未明確定義加密模式時,它默認爲OAEP。 OAEP要求密鑰至少爲2 *散列大小+2。默認的散列phpseclib使用的是sha1,長度爲20個字節。所以密鑰至少需要22個字節或176位。

你的長度是16字節或128位。

因此,您需要使用更大的密鑰或更改加密模式以使用PKCS1填充。 PKCS1填充需要模數至少爲11個字節。

如果在所選模數的長度不足時phpseclib顯示錯誤,它可能會很有用。我會盡力向他提出這個建議。

另外,FWIW,教科書RSA沒有強加任何最小長度要求,但是phpseclib當前不實現教科書RSA。我想你可以通過直接調用_exponentiate來獲得它,但這是唯一的方法。

教科書RSA不好,因爲它容易受到像PKCS1/OAEP防護的隨機填充的某些類型的攻擊。