由于秘钥格式不一致所以java和.net的加密与解密会出现问题 所以需要将两者进行转化
下面给出代码(需要引用BouncyCastle.Crypto.dll)
下载地址http://downloads.bouncycastle.org/csharp/bccrypto-net-1.7-bin.zip
public static string RSAPublicKeyJava2DotNet( string publicKey)
{
RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
}
//解密
public static IDictionary<string, object> RSAEncrypt(string publicKey, string enptStr)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(RSAPublicKeyJava2DotNet(publicKey));
var urlEncoder = new JwtBase64UrlEncoder();
IJwtAlgorithm algorithm = new RS256Algorithm(rsa);
IJsonSerializer serializer = new JsonNetSerializer();
var provider = new UtcDateTimeProvider();
IJwtValidator validator = new JwtValidator(serializer, provider);
IJwtDecoder decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);
return decoder.DecodeToObject(enptStr, publicKey, verify: true);
}