首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非对称Android RSA加密解密.NET

非对称Android RSA加密解密.NET
EN

Stack Overflow用户
提问于 2014-06-19 04:43:42
回答 1查看 1.5K关注 0票数 0

我正在用RSA加密JAVA,并试图用.NET解密。我包括我的安卓代码和.NET代码,希望有人对这类事情有一定的经验。

Android代码:

代码语言:javascript
复制
   byte[] modulusBytes = Base64.decode("xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=");
   byte[] exponentBytes = Base64.decode("AQAB");
   BigInteger modulus = new BigInteger(1, modulusBytes );               
   BigInteger exponent = new BigInteger(1, exponentBytes);

   RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
   KeyFactory fact = KeyFactory.getInstance("RSA");
   PublicKey pubKey = fact.generatePublic(rsaPubKey);

   Cipher cipher = Cipher.getInstance("RSA");
   cipher.init(Cipher.ENCRYPT_MODE, pubKey);

   byte[] plainBytes = new String("big kitty dancing").getBytes("UTF-8");
   byte[] cipherData = cipher.doFinal( plainBytes );
   String encryptedString = Base64.encodeBytes(cipherData);

从这个JAVA代码中,我得到了encryptedString的结果,它恰好是:

代码语言:javascript
复制
FoP4+AAIH6hcabXnrvNG5YUk/nBv9n9HU0CAgZjkIWQIDjbOpSwoPVBFERrZ6641x2QaoJw5yv18XAay+0WrCaSw4sveRX+hmPm5qeVUPcjoR4slsVZ/hBFJtAHj9tva4hOugWDZa9s3RVJlxkNfE+u+Kt/YKLOi2EYbH05HjeM=

并尝试使用以下.NET代码解密

代码语言:javascript
复制
 const int PROVIDER_RSA_FULL = 1;
   const string CONTAINER_NAME = "Tracker";

   CspParameters cspParams;
   cspParams = new CspParameters(PROVIDER_RSA_FULL);
   cspParams.KeyContainerName = CONTAINER_NAME;
   RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider(cspParams);
   rsa1.FromXmlString("<RSAKeyValue><Modulus>xTSiS4+I/x9awUXcF66Ffw7tracsQfGCn6g6k/hGkLquHYMFTCYk4mOB5NwLwqczwvl8HkQfDShGcvrm47XHKUzA8iadWdA5n4toBECzRxiCWCHm1KEg59LUD3fxTG5ogGiNxDj9wSguCIzFdUxBYq5ot2J4iLgGu0qShml5vwk=</Modulus><Exponent>AQAB</Exponent><P>+lXMCEwIN/7+eMpBrq87kQppxu3jJBTwztGTfXNaPUTx+A6uqRwug5oHBbSpYXKNDNCBzVm/0VxB3bo4FJx+ZQ==</P><Q>yasOGaJaE9xlF9T2xRuKeG9ZxCiyjhYaYB/mbtL+SIbtkRLi/AxaU4g2Il/UxhxhSXArKxIzV28zktispPJx1Q==</Q><DP>ueRgQIEFUV+fY979a1RgrVHIPpqEI1URhOMH3Q59oiXCcOumM5njyIHmWQxRAzXnG+7xlKXi1PrnRll0L4oOKQ==</DP><DQ>dfEMNgG1HJhwpxdtmqkYuoakwQvsIRzcIAuIAJh1DoWaupWJGk8/JEstHb1d+t7uJrzrAi2KyT/HscH2diE0YQ==</DQ><InverseQ>YoYF9PF6FiC0YngVeaC/eqt/ea8wMYNN3YO1LuzWpcy2exPRj2U0ZbWMvHXMUb4ea2qmhZGx1QlK4ULAuWKpXQ==</InverseQ><D>g1WAWI4pEK9TA7CA2Yyy/2FzzNiu0uQCuE2TZYRNiomo96KQXpxwqAzZLw+VDXfJMypwDMAVZe/SqzSJnFEtZxjdxaEo3VLcZ1mnbIL0vS7D6iFeYutF9kF231165qGd3k2tgymNMMpY7oYKjS11Y6JqWDU0WE5hjS2X35iG6mE=</D></RSAKeyValue>");

   string data2Decrypt =    "FoP4+AAIH6hcabXnrvNG5YUk/nBv9n9HU0CAgZjkIWQIDjbOpSwoPVBFERrZ6641x2QaoJw5yv18XAay+0WrCaSw4sveRX+hmPm5qeVUPcjoR4slsVZ/hBFJtAHj9tva4hOugWDZa9s3RVJlxkNfE+u+Kt/YKLOi2EYbH05HjeM=";

   byte[] encyrptedBytes = Convert.FromBase64String(data2Decrypt);  

   byte[] plain = rsa1.Decrypt(encyrptedBytes, false);
   string decryptedString = System.Text.Encoding.UTF8.GetString(plain);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-19 19:33:12

这里的教训是,不要依赖缺省值。你应该更换线路

代码语言:javascript
复制
   Cipher cipher = Cipher.getInstance("RSA");

带着线

代码语言:javascript
复制
   Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");

在Java代码中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24298941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档