java - 如何在c#中复制java加密

标签 java c# encryption rsa bouncycastle

我有 key 的公共(public)模数和指数。我正在对一段测试文本进行编码,并得到与我尝试复制的 java 代码不同的结果。

java代码在这里:

RSAPublicKeySpec rsaPublicSpec = new RSAPublicKeySpec(modulus, exponent);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(rsaPublicSpec);
X509EncodedKeySpec encodedPublicKeySpec = new X509EncodedKeySpec(publicKey.getEncoded());
KeyFactory keyFactory = KeyFactory.getInstance(“RSA”);
PublicKey publicKey = keyFactory.generatePublic(encodedPublicKeySpec);
Cipher cipher = Cipher.getInstance(“RSA / ECB / PKCS1Padding”);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);    
byte[] encryptedBytes = cipher.doFinal(clearTextString.getBytes());
BASE64Encoder b64 = new BASE64Encoder();
String base64EncodedStr = b64.encode(encryptedBytes);

我现在使用 Bouncy CaSTLe 在 C# 中拥有的内容是:

BigInteger publicModulus = new BigInteger(1, Convert.FromBase64String(publicKeyString));
BigInteger publicExponent = new BigInteger(1,Convert.FromBase64String("AQAB"));
RsaKeyParameters pubParameters = new RsaKeyParameters(false, publicModulus, publicExponent);
IAsymmetricBlockCipher eng = new Pkcs1Encoding(new RsaEngine());
eng.Init(true, pubParameters);
byte[] plaintext = Encoding.UTF8.GetBytes("test data");
byte[] encdata = eng.ProcessBlock(plaintext, 0, plaintext.Length);
Console.WriteLine(Convert.ToBase64String(encdata));

我很困惑为什么 java 代码获取公钥然后执行 X509 版本(以及我是否需要在 C# 实现中执行此操作)。 我也不确定是否需要补偿 c# 与 java 的字节序。

感谢一些帮助。

最佳答案

令人困惑的代码没有做任何事情。另外,一旦我得到了 base64 字符串的模数,Bouncy CaSTLe 就不再需要了。这是有效的。

        var publicKey =
                       "<RSAKeyValue><Modulus>base64modulusgoeshere</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
        var sbytes = Encoding.UTF8.GetBytes(s);
        var rsa = new RSACryptoServiceProvider(2048);
        rsa.FromXmlString(publicKey);
        var encdata = rsa.Encrypt(sbytes, false);
        enc = Convert.ToBase64String(encdata);

关于java - 如何在c#中复制java加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831087/

相关文章:

java - 当我尝试在另一个类中访问静态变量时,为什么它为空?

java - StarActivityForResult() 导致返回 Intent 数据时强制关闭

c# - 将字符串数组从 C# 返回到 Inno Setup

c# - RestSharp.Portable - IgnoreResponseStatusCode 属性不适用于 UWP 应用程序?

encryption - 使用 crypto/aes lib 的 Golang 文件加密

encryption - 当我有 IV、纯文本和加密文本时获取 AES CBC key

c# - 如何复制此在线工具使用的 AES 加密

java.lang.IllegalStateException : Unable to return a default Coder in dataflow 2. X

java - 如何使用java在Excel中导入文本文件?

c# - Try-catch 加速我的代码?