.net 和 java RSA加密问题

梦天城 2017-06-08 10:31:08
首先我是个c#小白,被拉去写c#demo,到现在类都没创建出来,用的一个别人的项目改的
那么问题来了,我先贴java解密的代码
解密时出现javax.crypto.BadPaddingException: Decryption error

//byte[] aesKeyByte ,getdata是string类型数据
BeanUtils.json2Bean(AesRsaUtil.decryptData((String)e.getData(), aesKeyByte, "UTF-8")

public static String decryptData(String resEncryptData, byte[] aesKeyBytes, String charset) throws UnsupportedEncodingException {
byte[] decodeBase64DataBytes = Base64.decodeBase64(resEncryptData.getBytes(charset));
byte[] aesDecryptData = AESDecrypt(decodeBase64DataBytes, aesKeyBytes, "AES", "AES/ECB/PKCS5Padding", (String)null);
return new String(aesDecryptData, charset);
}

public static byte[] AESDecrypt(byte[] encryptedBytes, byte[] keyBytes, String keyAlgorithm, String cipherAlgorithm, String IV) {
try {
if(keyBytes.length % 8 == 0 && keyBytes.length >= 16 && keyBytes.length <= 32) {
Cipher ee = Cipher.getInstance(cipherAlgorithm);
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, keyAlgorithm);
if(IV != null && StringUtils.trimToNull(IV) != null) {
IvParameterSpec decryptedBytes = new IvParameterSpec(IV.getBytes());
ee.init(2, secretKey, decryptedBytes);
} else {
ee.init(2, secretKey);
}

byte[] decryptedBytes1 = ee.doFinal(encryptedBytes);
return decryptedBytes1;
} else {
return null;
}
} catch (Exception var8) {
var8.printStackTrace();
return null;
}
}


下面是.net加密的代码
 // ZITOPAY_RSA_PUBLICKEY公钥加密 ,后面
string aesKey = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 16);//16位随机数

byte[] byteArray = Encoding.UTF8.GetBytes(aesKey);
string signature = RSAEncrypt(ZITOPAY_RSA_PUBLICKEY, byteArray);


public static string RSAEncrypt(string xmlPublicKey, byte[] EncryptString)
{
try
{
string publickey = "<RSAKeyValue><Modulus>MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxISByn8ytHt2XWZczV0qCV8yM+RSJwxh7YNfkzOh9LkED4xfWTFHl76kwopZqliQwO4c+8Y0B3yYNDSDxgiw0eBPCZ45yyeZ5WFl3a5JTi31OQU9FWv28DQxjXNyWw8xBoo8PHcdthosuzjLbYZvYgus/g0dSbDIp+EEXTOkUn99PKa7AGKuJpVxQmHDZPsWlO8V3cfGfyRu6+Iff6QLIhCVXc3PbK9WnvhCwVocoMIYQYefBjftCppskn80bGr1X4cBwFlgrDSepS7E9/GTUfSh1dScSk6q91oRdTiP5n4n6lk7lWn8bD5C/NDa5yOvskGU/qbx5XIF+kHyiKQ6NwIDAQAB</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
byte[] CypherTextBArray;
string Result;
System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);
rsa.FromXmlString(publickey);
CypherTextBArray = rsa.Encrypt(EncryptString, false);
Result = Convert.ToBase64String(CypherTextBArray);
return Result;
}
catch (Exception ex)
{
throw ex;
}
}


java的公钥,c#的是我自己拼出来的不知道对不对
public static final String ZITOPAY_RSA_PUBLICKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxISByn8ytHt2XWZczV0qCV8yM+RSJwxh7YNfkzOh9LkED4xfWTFHl76kwopZqliQwO4c+8Y0B3yYNDSDxgiw0eBPCZ45yyeZ5WFl3a5JTi31OQU9FWv28DQxjXNyWw8xBoo8PHcdthosuzjLbYZvYgus/g0dSbDIp+EEXTOkUn99PKa7AGKuJpVxQmHDZPsWlO8V3cfGfyRu6+Iff6QLIhCVXc3PbK9WnvhCwVocoMIYQYefBjftCppskn80bGr1X4cBwFlgrDSepS7E9/GTUfSh1dScSk6q91oRdTiP5n4n6lk7lWn8bD5C/NDa5yOvskGU/qbx5XIF+kHyiKQ6NwIDAQAB";

java的私钥
String priv = "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDEhIHKfzK0e3ZdZlzNXSoJXzIz5FInDGHtg1+TM6H0uQQPjF9ZMUeXvqTCilmqWJDA7hz7xjQHfJg0NIPGCLDR4E8JnjnLJ5nlYWXdrklOLfU5BT0Va/bwNDGNc3JbDzEGijw8dx22Giy7OMtthm9iC6z+DR1JsMin4QRdM6RSf308prsAYq4mlXFCYcNk+xaU7xXdx8Z/JG7r4h9/pAsiEJVdzc9sr1ae+ELBWhygwhhBh58GN+0KmmySfzRsavVfhwHAWWCsNJ6lLsT38ZNR9KHV1JxKTqr3WhF1OI/mfifqWTuVafxsPkL80NrnI6+yQZT+pvHlcgX6QfKIpDo3AgMBAAECggEAcpl7PuVSYmGlMu5gq/nqa7CyDATXy6Gy8dkswSDZD2ddcNvBNrhAMcOhPTmE9IvVTk0NZd29taf48mi1d6TVyG5waQF2XnxniJZ12wKqCQdP+8KMTpO5W3Z0dzKdu3BufIvceL5V+z3kXAHQz7wX9Csu5LAtJi4LtarI6rkU2G4ugbRoi/NSA9V3gGYrBV5nvoJfuTyEi1cULywSbmGCvGGZ34JeJhWqgCJmuCrsB1xQrHAkqATjdQlVarkbAJQGMjEAsIgmldof4Hex+l+2egO3pU1pOM0dwhE1Ecz+5hLgD7MwXfCa8vxXSHLcKalhFakcNsstLCagV4ltKfeD0QKBgQDpYuIvzq+xpSR/vTSM+34WOMLSUACJ7f77GT0hZIIP2AJUP3uqFP9+vgT/i2Qiq1b6sydkqbxR98us7+Lbt1elOqq5AqGS0VYZTXPXS65oqb/HKSflHDanE+C4jDMQ/RjIJHZXjPkejXcKSvyEsaIlOnEPNeoQup20rTiizhwbNQKBgQDXjxnhPVQYysCJ19LojYQl2gWcyu7khiL6Kh/DiDJbwrSMKPhBZHf87BqQKIok3eeZOwrKAD+r/oGRAB3535A03dlpTGpWD3y50Glkb3Fd2SFgos66AV94Wki1jlMSdQvJ4qruh01mOdPre8JGE2MqT+CWE0gnOUyeKE3HJuvBOwKBgBxJPs66hzLJqCXPQbpAlOSOlpY02gvdi4TVZ0JP0y+mZ4ncc9mGV/z9fM+YDlfhWlZiNkkOBWQN22KnZGBq1TWSabSoq/qGYqAIchzK8GWBBVxXEZ3EEJ+pWhgj7eCGPGWtfaZY0KyySpY1xmsyuEs4zREh4K+MXqbSQ8X/owptAoGAH4vCttLZ1tL9QG8EX6IuP7fbcGnGck0rGz9E7MGm1QT2lTh9tFw2rx4CeSxloyWSejtIxe0pZEtXvNeui13rZcE9ywoy2atkjnDwq5EfnyNinhjVdiUzSpKz51YP1Diq4/23FDda3WYDHIg9EzJNJekQrgXeXlclXlP5pfaNM/cCgYB3vd8Z+Di+iNd1qhxvcVwsAQ+hIZ7/VvbE+rZUeH3IbKfChX3mSiwqm88CVsKqtUzVAHwR6jE887mpYMpavoZQ2bhtLV8jANYT+UMYrWoRY63lHUeV704FcDH4zV3bU5Ul4iwiCOgZN0bZlG94wwDDW2E+qoba1tKrB/0M01/aUg==";

各位大神c#怎么写啊,小弟我真心不知道啊,哪儿有问题 c#公钥加密,java私钥解密
...全文
396 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦天城 2017-10-19
  • 打赏
  • 举报
回复
引用 5 楼 starfd 的回复:
java是aes对称加密,你下面的net代码为啥是rsa非对称?
java采用的是两次加密,有一遍是非对称加密的
  • 打赏
  • 举报
回复
java是aes对称加密,你下面的net代码为啥是rsa非对称?
CGabriel 2017-06-09
  • 打赏
  • 举报
回复
把C# 的加密解密代码封装成一个 COM 调用,然后 Java 调 COM 就 OK 啦。
梦天城 2017-06-09
  • 打赏
  • 举报
回复
引用 3 楼 CGabriel 的回复:
把C# 的加密解密代码封装成一个 COM 调用,然后 Java 调 COM 就 OK 啦。
现在是java服务端的是不能动的啊! 我要跟服务端对接,AES/ECB/PKCS5Padding java那边的算法,c#我也不会,找了好多都不管
梦天城 2017-06-08
  • 打赏
  • 举报
回复
引用 1 楼 lzlawy1314 的回复:
http://blog.csdn.net/u010678947/article/details/48652875 看看这个 我就按照这个弄好的
感觉不对 我看java的加密算法是这个 RSA/ECB/PKCS1Padding 用你发的这个会出现解密失败
哎呦呵-net 2017-06-08
  • 打赏
  • 举报
回复
http://blog.csdn.net/u010678947/article/details/48652875 看看这个 我就按照这个弄好的

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧