【问题标题】:Java Encryption C# DecryptionJava 加密 C# 解密
【发布时间】:2009-10-21 03:17:39
【问题描述】:

我有一个 RSA 加密数据并传递给 C# 的模块。 C#需要根据公钥(64位编码)和传递的token进行解密。

我有令牌,64 位编码的公钥,可以帮助我开始使用示例。 我从 Java 端所知道的是,它正在使用。我已经从 Java 端得到了结果,需要用 C# 编写一个解析器来解密它。我将公钥和令牌都作为字符串值获取。

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

谢谢

【问题讨论】:

  • 请查看我的答案的更新。

标签: c# java security encryption encryption-asymmetric


【解决方案1】:

要开始,您需要 私钥 来解密消息。通过“公钥(64 位编码)”,我猜您真正拥有的是 Base-64 编码证书,标题行显示“----- BEGIN CERTIFICATE-----”和页脚写着“-----END CERTIFICATE-----”。

如果正确,您需要找到私钥。这有时存储在 PKCS #12 格式文件中,扩展名为“.p12”或“.pfx”。如果私钥存储在此类文件中,您将需要密码才能访问。

或者,OpenSSL 和其他实用程序使用可以是 Base-64 编码或二进制的私钥文件。它们具有多种扩展名,可能受密码保护,也可能不受密码保护。如果您拥有的文件具有“-----BEGIN RSA PRIVATE KEY-----”或“-----BEGIN PRIVATE KEY-----”的标题行,那实际上是私钥.

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

当您澄清私钥的位置时,请更新您的问题。


如果在 Java 端使用私钥,则可能是尝试执行数字签名。虽然我测试过的所有几个 Java 提供程序在(ab)以这种方式使用时都会产生正确的结果,但如果您正在执行签名,则应该使用 Signature 类。 C# 代码也应该使用签名对象来“验证”签名。

使用私钥进行加密。由于 public 密钥是 public, 任何人都可以解密消息;即,消息不是机密的。收件人使用公钥来验证签名的消息。

【讨论】:

  • 在Java端使用私钥完成编码。我假设可以在 C# 端使用公钥来解密这个?
  • 谢谢。所以,鉴于我有公钥(不是证书) - 我想我可以得到它,但是代码正在将证书中的密钥传递给我,我从哪里开始? :)...
【解决方案2】:

检查此代码。

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);
            }
          }
        }

【讨论】:

  • RijndaelManaged :对我来说看起来像是不同的算法?
猜你喜欢
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多