-1

Code Sample in php using phpseclib with RSA XML FORMAT PUBLIC AND PRIVATE KEY :

NOTE : IN this PHP SAMPLE : RSA XML FORMAT PUBLIC AND PRIVATE KEY created by c#.net and data decrypt successfully in this php sample.

include 'vendor/autoload.php';
$rsa = new \phpseclib\Crypt\RSA();

//extract($rsa->createKey());

$publickey1 = "<RSAKeyValue><Modulus>sNBrh+HL35mYAxWwd7nGOWkrj7If39+kzlUv3L+OSIHkZd0zocyyt8qkhLoN5RsgrqFyHXHScyZPA7A/eGjRYOGrpQZt8BU9PIv7CN6vDdSXyhb60xyhBGDLkVD0Z0898oCYEmQpHs+8KPNOIVbOJUqH38S+/G3zzJrEUUijU877Gr21E/0sqzZGWsuZdmccPGQeiyFcyghzVL5R5jwJNsNO+lm5VW0YmknMrbg2JOGV8Iv6olcrdskRYD9iZkJrWq4y/jES/1tjvIaaI16HUDSCSoico/xbWLNgQaIAGs9tf2nspyaPT3h17MCR0BkzgMkhhv/DYywYp5AQ7o8HdomO8PnlouV2yESu65hNNvEjHxsTt4iA+avxYX1YB2kjSg0aiinRBhoqW/65iW6+yQm2//LfSw0fzfowhS207vvX1b+nFHsZTLlhMrAfH7V5pSS2ProrgXIGduKTfmTmfNz3X3DKeOuGRbA4gcA20gNN1smj/LPT1LlaIiwytKbdvn4evBYJIJsf2+9xnYeqrPuJDROLrdaCXX/rsAbKEID3zds/nZevpE9jN0DJSCwsr+2eDMz3AgYA0Ihn8RIj46ba/GRCd8TGs/O0Q78bB41nvBVgZ3xPVZgL+ObJiIw0n3OGDAfMR7yabsk3aMYSfKLuFWtqooGei5PKZ7LXnL+8OG/fy8KIsNSPEHu0t+SutI2LNIfkk0iOw9G1DPFdwY5VwPfMf1ao3ZXnJxrixuP0w4lHpKMhckPyoqYrblVkMHXP8Vdpc5YwamXMXb/Zo2xxjpY8cPi1oUjJRMt7GzuKDFK9wH1CSIXZlAyLzB4ijK3kK81um9plUguCJHYzrw==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

$privatekey1 = "<RSAKeyValue><Modulus>sNBrh+HL35mYAxWwd7nGOWkrj7If39+kzlUv3L+OSIHkZd0zocyyt8qkhLoN5RsgrqFyHXHScyZPA7A/eGjRYOGrpQZt8BU9PIv7CN6vDdSXyhb60xyhBGDLkVD0Z0898oCYEmQpHs+8KPNOIVbOJUqH38S+/G3zzJrEUUijU877Gr21E/0sqzZGWsuZdmccPGQeiyFcyghzVL5R5jwJNsNO+lm5VW0YmknMrbg2JOGV8Iv6olcrdskRYD9iZkJrWq4y/jES/1tjvIaaI16HUDSCSoico/xbWLNgQaIAGs9tf2nspyaPT3h17MCR0BkzgMkhhv/DYywYp5AQ7o8HdomO8PnlouV2yESu65hNNvEjHxsTt4iA+avxYX1YB2kjSg0aiinRBhoqW/65iW6+yQm2//LfSw0fzfowhS207vvX1b+nFHsZTLlhMrAfH7V5pSS2ProrgXIGduKTfmTmfNz3X3DKeOuGRbA4gcA20gNN1smj/LPT1LlaIiwytKbdvn4evBYJIJsf2+9xnYeqrPuJDROLrdaCXX/rsAbKEID3zds/nZevpE9jN0DJSCwsr+2eDMz3AgYA0Ihn8RIj46ba/GRCd8TGs/O0Q78bB41nvBVgZ3xPVZgL+ObJiIw0n3OGDAfMR7yabsk3aMYSfKLuFWtqooGei5PKZ7LXnL+8OG/fy8KIsNSPEHu0t+SutI2LNIfkk0iOw9G1DPFdwY5VwPfMf1ao3ZXnJxrixuP0w4lHpKMhckPyoqYrblVkMHXP8Vdpc5YwamXMXb/Zo2xxjpY8cPi1oUjJRMt7GzuKDFK9wH1CSIXZlAyLzB4ijK3kK81um9plUguCJHYzrw==</Modulus><Exponent>AQAB</Exponent><P>5YtctO1LF3/S8cbDqyKFK0SXT0xNSJ/IQ8hLzRG5okx52U8/pbirFa37yjkmtlMCfOHfFm5zD5OdmP4Rsdbs9WanSgkBt/rEBfokvuBuJoa77RsO8JhFqg/yvkcA+7uKeEwwc9ONLLRcull3fvCm0qiAea2eaG5Aur5WBOi9jMdTwJrXoWdCQljITcH6c+7ymthGzcWTWCxcc2j+wx/72LWn1ar9iWa83Nl9E8ohwsOpRXBV2O/IKFQK+G3XNIeoDQVXIuxT3h1yqM40Fq3+DOF6jblfOTzkKReN76Ij5Glayn7JjmE5aC/OFX5D4EgbDdprBztrW+irsHNNi/Hv3u2kgneRHzs/ZgI0fBf0MP4yVZH/LziXal0XKCODe2deyWH/EyqUOFPRFwFQERlj6eGv/JKVKJRXgkSOzGGyjrc=</P><Q>xTFEmuXayX3UmXKyuhUM/aztTssl/DpTHqerfgKcG6ldbakrPLVjohFKzHtyttWwNXPgh3bBP51vrocYK9pUBSvMmVpemsCECQQHlyQpfgHsM/g27wAVxkvJMfLCW5iIbj4MPr0opxEsrvvKs8sN9MQu10DS5VQU4or7aiMtBK5wLgknY4I3bth3DACEFLN9/Qmh6w9mKqZo/3vcDbSteQ6ByBRoGBH7/W8+aIoNVlz9WaEXRjyj5UEEUa29eth5LgSJKK+0Hc9GwJtE3D78Lsq1loIu86nX/TKBLNjKlnrj7pXQJV14PnNzgEciMWNYJWirk1xa1XdyMbQmYvfzT00/hSlbECp53cRXVWMvNGsz7pHvyhUQv02XjY+hLNVXjxjRKuQEzfO8+ByYFA1J0jJ921AyfUljtcLvGDbXCsk=</Q><DP>mi8rHWiK2QUGN1rwkaJFWxPeoug4vUB+b3E54Uw3qdm+uwYtVW6elJhiGaqb4zoM4L+DbvjPlrXr1RlL323jis7iLauxGNh7FRy50/DCbGRyFMjpFxjhKmM+BSuCcJS/ZSCgJx0BpfaclpuD1aNmGvgOHC1PywvLtOQmuXNv5wD4s9YOYx8N9azXFsvmJDtrgDEoFg3RdBeQHgF3pq90JlOWocISPVniIGKCTmmmlcGBkN/s+iPOCbCyEb8OH/3DFsPwjMe7aeXT36lqeZVzoUlPXaUXXkYVZ7inoUAC5ekSkBPr5RRPUDlUL0G57AvjCEIfRCNYcMrvkD1S6F6hZdeweeZAd37/jdCLWpNodgQ44RuJEjnsEwjmhhKcvaZol9KYWFJwbwl12AMMuf+ZCj+LS5dWU4SY5yqP1J8HJi8=</DP><DQ>aClALfogebKH7I5TrkuUUyNXLvnMFNHSOi0jPyqtv0bVXSmw9x5xhJhRxHWpAL8blwCgp62pIqtM5QnjULbBDwI1zwOXWXM7y29fewzVBgSJ+mGw0spetiIuIr4ywCNwXZtU6IcOxEEkM0I5roMh2hsPCxDo1c52QbxcVZJDI2fpRcf8EGomUdzx9VsIac7uTA0chIfb1ceVSu7oLC02PO3WzBNLcPt++j4a3ymdJfN0uDWJj8ZUZLLVTzfREOTsDczDjsRRBjYJD5B07Uov95+ID/qwRnF+7/YPmdriGF7Nq6djDXm0HHjrl+T7QM9TLl990hdEu+GeZnbcmAaVdVw+o15XBdEKEoS2BRqhQrUl920LFtnNwN+BoHswDfibibD4PAm6J/gJ551jD6R9TBTzujdAlEGB8+8GUOoW6VE=</DQ><InverseQ>ZFoiU0pJDAkv6A/wPCTy+VotM13sKEUoLELlDpbYZlWbux/16r8/D8pGhmvfBLqM7bDDCJaBsCRCswpAAGdNcGhC0C1eMSohmzdTv9Md5/Ep0vtNjuy0mNZ00DUP1Y6KuSP0c5L2vDnjNoARk6B57E/NKZqpNoz7oPwjwV8+/3HSW7bcl/yYXatmBxMlKuUwe4GHzMVBrdoHaWDVoHbtvcTb8gqAf5eSJAiAs2T1gCahK8Sy5/CbtHtCbtBi5sm7sISWSLpg0sO6JRchC3JRKpoygPxT2dyKvOqUjZzvzB6bjWP+1eT8h13DUVmsWydfqE+vzcbMjjKxzX8LuN+qMl4YZ6teGvSTFr+EE2zIsfv83+AfmMdCKQU7mWibk7X5iu8dWSatUGkAny4Mx0XBQc+2mgw1Hs3R8HmkOljoYd0=</InverseQ><D>IsHl0YFWhW75DeoulWqEh/afpJC8aVLaX+EpFnjlbGV0U33nT3Ag1bZVHu5AGwB5LTr5ZsZgO1iVgcEcyPu55RSXnEomRGK4dfWCdJzpxos7B3P6/JMNKAIrIjbKxKA0Kj6TJlJgLvlhIJ+rhSw+O+Bp01gmvxKSMW9fFid0S95NSFVwiixjooh5zhFl6nucdlasFmeJiQGeQlNjYCH/Ia/FD7uhjiRzCKlnPeMPabKauf2aWF1QYvplmwj6u+Vkmx/RUFyvQllhwsam+Dr12JNp5WLzf9z0y/v++Qfyg1KxULGu3rDazSF99Ptp7oF1uWRQXexbKVyawB225l5hdjDWU5KcTKhU8EtoI1H+I8XFRLEa8CI6UFo3ihWMv3AwircGt5A+0bdFCm6JZHXLtVNekPPaZzN+RAxhi1yPy8aMJPrs5h/tgMWdzW9Gl1aR362h8d6jKtQCTIXl50txiRFaOvZTRgdf5dZQAzcTv1/kIbqptebQWShTRGAX/CIERT0Bq4+U+lgY4a8f9rGAU5W9w8JliJd307cF8JqTrGzqoeNCEP05LpK2a3GTgKtb0Zsmp8gW/jkbZ5Ir3UgpJcbM9Rd5wUYLRXVUsUHTRWMjjNzoWAm0UCc8Bk/QJPR96eOecaoTRjyTgieC1ipTfHydv8g2Z1EX/Q3Q9qWa/UefV1rMI5HFaCt5/FmzZMMvt748psbYD2hOhVj2iwVcOWsT/mJE9WG6jWLT2KQl0wIYV7qzP+sSmk63QLCAavzUlKCCwyRA9kaukgsgoXll854RQXz92qxTxzdEj4Y+v5VpSBRiK8MU9I/BUfYX43+z9Q4e3B/x9UXFrnkmNkJdkQ==</D></RSAKeyValue>";

$plaintext = "invoice_number=1,100.00";

$rsa->setEncryptionMode(2); // encryption mode

$rsa->loadKey($publickey1);

$ciphertext = $rsa->encrypt($plaintext);

$rsa->loadKey($privatekey1);

echo $rsa->decrypt($ciphertext);

and next , data encryption with non-xml rsa public and private key created by c#.net

in this sample , data encryption and decryption is getting blank.

include 'Crypt/RSA.php';
$rsa = new Crypt_RSA();
//extract($rsa->createKey());
// when upper line make uncomment and below $privatekey and $publickey variable commented then this code encrypt and decrypt data successfully.

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);

$publickey = "-----BEGIN PUBLIC KEY----- BgIAAACkAABSU0ExAAQAAAEAAQAnh6FFs6kYe/gmb9dzqsQKmtjFE9mxNAe9mEU3OwOEEfyIwkAx0/8dwh12fuP4wzNbdZAq4mmqCE6Lo8wTNNIJVNYEhKq5chHg1+hPDgfETFgtEO54JZSg3cBZWEV/Tq3LHEX8CaLvHZxMEfFXbTfliFYMLoJ+YK1mpg9GYcmbrQ== -----END PUBLIC KEY-----";

$privatekey = "-----BEGIN RSA PRIVATE KEY----- BwIAAACkAABSU0EyAAQAAAEAAQAnh6FFs6kYe/gmb9dzqsQKmtjFE9mxNAe9mEU3OwOEEfyIwkAx0/8dwh12fuP4wzNbdZAq4mmqCE6Lo8wTNNIJVNYEhKq5chHg1+hPDgfETFgtEO54JZSg3cBZWEV/Tq3LHEX8CaLvHZxMEfFXbTfliFYMLoJ+YK1mpg9GYcmbrVmMAKSoOgETkkiJJzYmXftO3KOveBtvkAzjHxxSS1yP/Ba10BzeIleH96SbTuQtQRLXwRykdX9uazK+YsiSud9/PyLbgy5TI+o28OHq5P+0y5+a9IaAQ/92UwlrkHUYfhN/xTVlUIxKlTEdUQTIf+iHif8d4ABb3OdYJXZOW6fGeUP10jMyvbnrEoPDsYy9qfNk++0/8UP2NeO1IATszuZYg1nEXOW/5jmUxMCdiFydp9ES211kpEZ4XcvjGaDlaQ+bLWj05i2m/9aHYcBrfcxxvlMa/9ZvrX4DfPWeydUDDDQ4+ntpT50BunSvmyf7cUk76Bf2sPgLXUQFoufEQ5g1Qo/v1uyhWBJzh6OSUO/DDXN/s8ec/tN05RQQFZQ0na+v0hOCrV9IuRqtBuj4WAj1I/A1JjwyyP9Y/6yWFPM6EcS/6lyPy30lJPoULh7G29zkn7NVdTEkDtthdDjtX7Qhgd9qWvm5ADlmnvsS9A5m7ToOgQyOxtJoSlLitLbf/09LRycl/cdIzoMOCEdPe3DQcyEKqUPsghAq+DKw3uZpXwHzwTdfqlHSWAnHDggFKV1HZuWc1c4rV4k4b513TqE= -----END RSA PRIVATE KEY-----";

$plaintext = 'terrafrost';

$rsa->loadKey($publickey);
$ciphertext = $rsa->encrypt($plaintext);

$rsa->loadKey($privatekey);
echo $rsa->decrypt($ciphertext);

c#.net generate non-xml rsa public and private keys:

 CspParameters cspParams = new CspParameters { ProviderType = 1 };
 System.Security.Cryptography.RSACryptoServiceProvider rsa = new                 System.Security.Cryptography.RSACryptoServiceProvider(1024, cspParams); 
 // Generate a new 2048 bit RSA key

 String public_key = Convert.ToBase64String(rsa.ExportCspBlob(false));
 String private_key = Convert.ToBase64String(rsa.ExportCspBlob(true));

pls help me , why data does not encrypt and decrypt in php using c# public and private keys..

neubert
  • 15,947
  • 24
  • 120
  • 212
test comp
  • 1
  • 1

1 Answers1

0
  1. You're using two different versions of phpseclib. For decryption you're using the 1.0 branch and for encryption you're using the 2.0 or master branch.

    So first thing I'd recommend is using the same version for both.

  2. It'd also be good to use the constants instead of the integers that they correspond to. eg. don't do $rsa->setEncryptionMode(2) - do $rsa->setEncryptionMode(Crypt\RSA::ENCRYPTION_PKCS1). At least for your first code snippet that has working code.

  3. For your second code snippet, where you're using a different version of phpseclib than the first code snippet... your keys aren't valid.

    The fact that they begin with BgIAAACkAAB and BwIAAACkA... keys that begin with -----BEGIN PUBLIC KEY----- or -----BEGIN RSA PRIVATE KEY----- should start with MIICXAIBAAKB or MIGfMA0GC. https://stackoverflow.com/a/21289989/569976 provides a more detailed explanation of why this is.

    The format that your keys appear to be in (and that you seem to have tried hand alter into a format that phpseclib supports) is in fact a Microsoft Key BLOB. I've written a preliminary decoder here:

    https://stackoverflow.com/a/32486709/569976

    It would be nice to expand this further and get it into the phpseclib core but we'll see.

Andy
  • 49,085
  • 60
  • 166
  • 233
neubert
  • 15,947
  • 24
  • 120
  • 212
  • Can u tell me pls that RSA public and private keys are generated by c# are not correct like first 2 chars of rsa private key and public key is not same. that why phpseclib is unable to encrypt and decrypt data . but these same rsa public and private keys are working fine in c#. pls help me.. – test comp Oct 13 '15 at 06:44
  • There are lots of different key formats that exist. phpseclib handles some of them but not all of them. The `BgIAAACkAAB...` key is in a format phpseclib doesn't handle. So in-so-far as phpseclib is concerned it is invalid. And it appears that you tried to turn the `BgIAAACkAAB...` key into one phpseclib would support by prepending `-----BEGIN PUBLIC KEY-----` to the key. Which, if so, is rather like trying to convert a BMP to a JPEG by changing the file extension. – neubert Oct 13 '15 at 13:09
  • Also, and as I said in my post, I've done some preliminary work on supporting the key format you appear to be using. You can see that work at http://stackoverflow.com/a/32486709/569976 . I can expand on this work but a PayPal donation or something would be nice. You can donate to zelnaga@gmail.com ! – neubert Oct 13 '15 at 13:24
  • @testcomp - the master branch of phpseclib now has MSBLOB support built in. See https://github.com/phpseclib/phpseclib/blob/master/phpseclib/Crypt/RSA/MSBLOB.php . Keep in mind that the master branch is namespace'd and requires an auto loader. – neubert Oct 28 '15 at 15:52