c java互通rsa_C# RSA和Java RSA互通

本文展示了如何实现在C#和Java之间使用RSA加密解密数据的互通。通过提供C#和Java的代码示例,作者演示了如何在两个平台上互解对方加密的数据,证明了C#与Java的RSA加密可以无缝配合。
摘要由CSDN通过智能技术生成

今天调查了C# RSA和Java RSA,网上很多人说,C#加密或者java加密 ,Java不能解密或者C#不能解密

但是我尝试了一下,发现是可以的,下面就是我尝试的代码,如果您有什么问题,我想看看,他们为什么不能互通?

Rsamain代码

package rsa;

import java.math.BigInteger;

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.spec.RSAPrivateKeySpec;

import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;

import com.sun.org.apache.xml.internal.security.utils.Base64;

/**

* @author qh

* Jan 6, 2015

*/

public class RSAMain {

private static String module = "5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=";

private static String exponentString = "AQAB";

private static String delement = "vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=";

private static String encryptString = "Vx/dGjS1YWKRubsoDgiShiwLgqyNE2z/eM65U7HZx+RogwaiZimNBxjuOS6acEhKZx66cMYEAd1fc6oewbEvDIfP44GaN9dCjKE/BkkQlwEg6aTO5q+yqy+nEGe1kvLY9EyXS/Kv1LDh3e/2xAk5FNj8Zp6oU2kq4ewL8kK/ai4=";

/**

* @param args

*/

public static void main(String[] args) {

byte[] en = encrypt();

System.out.println(Base64.encode(en));

byte[] enTest = null;

try {

enTest = Base64.decode(encryptString);

} catch (Base64DecodingException e) {

e.printStackTrace();

}

System.out.println(enTest.length);

System.out.println(en.length);

System.out.println(new String(Dencrypt(en)));

System.out.println(new String(Dencrypt(enTest)));

}

public static byte[] encrypt() {

try {

byte[] modulusBytes = Base64.decode(module);

byte[] exponentBytes = Base64.decode(exponentString);

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[] cipherData = cipher.doFinal(new String("chenhailong").getBytes());

return cipherData;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

public static byte[] Dencrypt(byte[] encrypted) {

try {

byte[] expBytes = Base64.decode(delement);

byte[] modBytes = Base64.decode(module);

BigInteger modules = new BigInteger(1, modBytes);

BigInteger exponent = new BigInteger(1, expBytes);

KeyFactory factory = KeyFactory.getInstance("RSA");

Cipher cipher = Cipher.getInstance("RSA");

RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, exponent);

PrivateKey privKey = factory.generatePrivate(privSpec);

cipher.init(Cipher.DECRYPT_MODE, privKey);

byte[] decrypted = cipher.doFinal(encrypted);

return decrypted;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

C#代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Security.Cryptography;

namespace RSA

{

class Program

{

static void Main(string[] args)

{

string de  = "iBILuPJFgPMxgpbgN3F2JjD6XjcqRSApjVVbvBBEBDV21Pjj7lTrfhEjSVnJX/MVoZrmX0lxsvoXTMvvVwVF7K7W5hs7Qo+aMN96yWke7wiLEM9M4pPz60A/KSckskiona67tXcqOLXb8N18TKaNCKHv0Ce+GyEKK5+MT7e1vao=";

//string encrypt = RSAEncrypt("", "chenhailong");

byte[] encrypt = RSAEncrypt("chenhailong");

//string name = RSADecrypt(encrypt);

string name = RSADecrypt(Convert.FromBase64String(de));

Console.WriteLine(encrypt.Length);

Console.WriteLine(Convert.ToBase64String(encrypt));

Console.WriteLine(name);

Console.ReadKey();

}

///

/// RSA encrypt

///

///

///

///

public static byte[] RSAEncrypt(string content)

{

string publickey = @"5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=AQAB";

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

byte[] cipherbytes;

rsa.FromXmlString(publickey);

cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);

//return Convert.ToBase64String(cipherbytes);

return cipherbytes;

}

///

/// RSA decrypt

///

///

///

///

public static string RSADecrypt(byte[] content)

{

string privatekey = @"5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=AQAB

/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==

6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=";

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

byte[] cipherbytes;

rsa.FromXmlString(privatekey);

cipherbytes = rsa.Decrypt(content, false);

return Encoding.UTF8.GetString(cipherbytes);

}

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值