Reputation: 389
I'm trying to use the phpseclib to encrypt/decrypt strings that was encrypted in VB.NET, when I tried to decrypt the RSA XML from VB.NET I get no errors, just a blank page.
Here is the XML keys created from VB.NET:
Private Key:
<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent><P>57hBPSAr6VGVYTYL6pUft0y9hbU7cUYEiYhF2pVJ0pv6pGWIb27nK+9U/AaWH0+wtefpRlVyjbeNiDK3rmYmtQ==</P><Q>u8Jgam1//jhcYYCZX5168L0roe6L+IJ0A98zlbQb7crpqbTxqDAsX9LQpGiQP1JZINowAbPECDRZIGfT+fsV9w==</Q><DP>AZASkJD4+tfcBA3TQr/CuP/Bf3dbcUYhnbPXlMPQ/aSjqhwtMWM0F+3DSvfYZ1moPXHU9u54mVAVmkeNSZXSyQ==</DP><DQ>J1DFVaPGKFpu5a/C7eWQ57YE2+ySfJ/8YQ8sww0qx/k0Qmf0Li6gLBR9wd9vTQMWTK3DXafhxYIIo6N6HJ858w==</DQ><InverseQ>Q2MlSoE2ADtFXvjPi5UgxApqp4QewmZONu3vGmAL07JMyDHdgVweevZTJTun3EBRKV0PWCMvtk4BJW0lUSuBNQ==</InverseQ><D>TCzzVWYWu+xJWJ+DazynJS3dQShPUnsz5ANDxSU6rVaR9tudJAfHGfR5IaWJ8bKTK4wPUBXgCBeBfxjz5wc20SyBWa1vL7K4DqLRJ/qEyFSZxXr8wKQOKyexZRGbsLjtUnmYrrXKMOhRkiV/VI1K+TKX/FhoDVPjz8s4GamzNQk=</D></RSAKeyValue>
Public Key:
<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
Plain text: hello
RSA encrypted: [From VB.NET]
d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI=
PHP Code:
<?php
include('Crypt/RSA.php');
$publickey = '...';
$xml = new DOMDocument();
$xml->loadXML($publickey);
$modulus = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Modulus')->item(0)->nodeValue), 256);
$exponent = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Exponent')->item(0)->nodeValue), 256);
$privatekey = '...';
$xml = new DOMDocument();
$xml->loadXML($privatekey);
$d = new Math_BigInteger(base64_decode($xml->getElementsByTagName('D')->item(0)->nodeValue), 256);
$dp = new Math_BigInteger(base64_decode($xml->getElementsByTagName('DP')->item(0)->nodeValue), 256);
$dq = new Math_BigInteger(base64_decode($xml->getElementsByTagName('DQ')->item(0)->nodeValue), 256);
$inverseq = new Math_BigInteger(base64_decode($xml->getElementsByTagName('InverseQ')->item(0)->nodeValue), 256);
$p = new Math_BigInteger(base64_decode($xml->getElementsByTagName('P')->item(0)->nodeValue), 256);
$q = new Math_BigInteger(base64_decode($xml->getElementsByTagName('Q')->item(0)->nodeValue), 256);
$rsa = new Crypt_RSA();
$rsa->modulus = $modulus;
$rsa->publicExponent = $exponent;
$rsa->exponents = array(1=> $dp, $dq);
$rsa->coefficients = array(2 => $inverseq);
$rsa->primes = array(1 => $p, $q);
$rsa->k = strlen($rsa->modulus->toBytes());
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = base64_decode('d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI=');
echo $rsa->decrypt($ciphertext);
?>
Upvotes: 0
Views: 998
Reputation: 16792
Works fine for me:
<?php
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->loadKey('<RSAKeyValue><Modulus>qfOIjoSxsmBqS3YGsxd4+FBEmFmX4Z/cTAV4l3BOqmMVDxTxHt4QuvK8l2Iv6GeTSp5xuwpqUkgwyo4zb2UQt1sLn2vvAmGqz7Oih6gHYrpA9GmR6QHomsQNJrDTvZXtCPNUmWZ5DzFjnKNL/FfZQGYp0qjIkpIhuLAUhKYzMaM=</Modulus><Exponent>AQAB</Exponent><P>57hBPSAr6VGVYTYL6pUft0y9hbU7cUYEiYhF2pVJ0pv6pGWIb27nK+9U/AaWH0+wtefpRlVyjbeNiDK3rmYmtQ==</P><Q>u8Jgam1//jhcYYCZX5168L0roe6L+IJ0A98zlbQb7crpqbTxqDAsX9LQpGiQP1JZINowAbPECDRZIGfT+fsV9w==</Q><DP>AZASkJD4+tfcBA3TQr/CuP/Bf3dbcUYhnbPXlMPQ/aSjqhwtMWM0F+3DSvfYZ1moPXHU9u54mVAVmkeNSZXSyQ==</DP><DQ>J1DFVaPGKFpu5a/C7eWQ57YE2+ySfJ/8YQ8sww0qx/k0Qmf0Li6gLBR9wd9vTQMWTK3DXafhxYIIo6N6HJ858w==</DQ><InverseQ>Q2MlSoE2ADtFXvjPi5UgxApqp4QewmZONu3vGmAL07JMyDHdgVweevZTJTun3EBRKV0PWCMvtk4BJW0lUSuBNQ==</InverseQ><D>TCzzVWYWu+xJWJ+DazynJS3dQShPUnsz5ANDxSU6rVaR9tudJAfHGfR5IaWJ8bKTK4wPUBXgCBeBfxjz5wc20SyBWa1vL7K4DqLRJ/qEyFSZxXr8wKQOKyexZRGbsLjtUnmYrrXKMOhRkiV/VI1K+TKX/FhoDVPjz8s4GamzNQk=</D></RSAKeyValue>');
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
echo $rsa->decrypt(base64_decode('d1YJ4ePp80Oe0OBTl+fBAKzDUogC56k7XB8ANggDotm44frzkNYUICUog/BV9x7mQyNT0lHj7vXo0uXrOIAS0BxgCNbqrpw0UBIyCX5rMDZF1v/1eQMTDa3jEwss1DQHHikQWVLFH5IGCspzJUTitwQTAyRCLdYTRijTCQhf0oI='));
phpseclib has had built-in support for XML keys for a while now so you don't need to jump through all the hoops you did in your code.
The plaintext is h e l l o
. Make sure you're running the latest version of phpseclib if you're not already. I don't know of issues with older versions that'd cause problems but running the latest is never a bad idea anyway.
Upvotes: 1