如何使用c#.net创建的rsa公钥加密明文,并在c#中解密


how to encrypt plaintext using rsa public key created by c#.net and decrypt in c#

php中使用phpseclib和RSA XML格式公钥和私钥的代码示例:

注意:在这个PHP示例中,RSA XML格式公钥和私钥是由c#.net创建的,并且数据在这个PHP示例中解密成功。
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);

,然后使用c#.net创建的非xml rsa公钥和私钥进行数据加密

在这个示例中,数据加密和解密变为空白。

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生成非xml rsa公钥和私钥:

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

请帮助我,为什么数据不加密和解密在PHP使用c#公钥和私钥…

  1. 您正在使用两个不同版本的phpseclib。对于解密,您使用1.0分支,对于加密,您使用2.0或主分支。

    所以我建议的第一件事是使用相同的版本。

  2. 最好使用常量而不是它们对应的整数。如。不做$rsa->setEncryptionMode(2),做$rsa->setEncryptionMode(Crypt'RSA::ENCRYPTION_PKCS1)

  3. 对于你的第二个代码片段,你使用不同版本的phpseclib比第一个代码片段…您的密钥无效

    他们从BgIAAACkAABBwIAAACkA开始…以-----BEGIN PUBLIC KEY----------BEGIN RSA PRIVATE KEY----- 开头的键应该以MIICXAIBAAKBMIGfMA0GC开头。https://stackoverflow.com/a/21289989/569976提供了更详细的解释。

    您的键的格式看起来是(并且您似乎已经尝试手动更改为phpseclib支持的格式)实际上是Microsoft Key BLOB。我在这里写了一个初步的解码器:

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

    进一步扩展它并将其放入phpseclib核心会很好,但我们将看到