我得到其RSA加密数据并传递到C#的模块。 C#的需要对其进行解密基于(64位编码)的公共密钥和所述传递令牌。

我的道理,64位编码的公钥,可以有些帮助我得到与样品上手。 从Java端我所知道的是,它使用。我有从Java端需要的结果写在C#解析器解密此。我同时获得公共密钥和令牌作为字符串值。

    Cipher cipher = Cipher.getInstance(ALGORITHM); //Algorithm = "RSA"
    cipher.init(Cipher.DECRYPT_MODE, key);

由于

有帮助吗?

解决方案

要开始,你需要的私人的密钥来解密消息。通过“公共密钥(64位编码)”,我猜你真的有一个基地64编码证书,有标题行,上面写着“----- BEGIN CERTIFICATE -----”和页脚,说: “----- END CERTIFICATE -----”。

如果这是正确的,你需要找到私钥。这有时存储在PKCS#12格式的文件,用“的.p12" 或” .PFX”扩展名。你需要一个密码来访问私钥,如果它被存储在这样的文件。

可替换地,OpenSSL和其他实用程序使用私有密钥文件,可以是基64编码或二进制。这些有多种扩展功能,并且可能会或可能不会是密码保护。如果你有文件有标题行“----- BEGIN RSA私钥-----”或“----- BEGIN PRIVATE KEY -----”,那其实是私钥

最后,Windows可以存储在其内部密钥存储私钥。

当你明确了私有密钥的位置,请更新您的问题。


如果私钥在Java端使用时,它可以是执行数字签名的尝试。虽然所有的几个Java供应商时(AB)用这样的方式我已经测试产生正确的结果,如果你正在做的签名,应使用Signature类。 C#代码应该使用签名对象来“验证”签名也是如此。

加密与所述私有密钥来执行。由于公共键是公开,任何人可以解密该消息;即,消息不是保密的。公共密钥由接收者以验证签名消息使用。

其他提示

检查这代码进行。

public static string Decrypt(string inputText)
      {
        RijndaelManaged rijndaelCipher = new RijndaelManaged();
        byte[] encryptedData = Convert.FromBase64String(inputText.Replace(" ","+"));
        PasswordDeriveBytes secretKey = new PasswordDeriveBytes(ENCRYPTION_KEY, SALT);

        using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
        {
          using (MemoryStream memoryStream = new MemoryStream(encryptedData))
          {
            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
            {
              byte[] plainText = new byte[encryptedData.Length];
              int decryptedCount = cryptoStream.Read(plainText, 0, plainText.Length);
              return Encoding.Unicode.GetString(plainText, 0, decryptedCount);
            }
          }
        }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top