【问题标题】:Decrypt the data using the decrypted key使用解密的密钥解密数据
【发布时间】:2012-01-13 19:07:33
【问题描述】:

我正在尝试使用私钥解密数据。我能够使用 RSA 和私钥解密密钥。现在我想使用解密的密钥解密数据。数据使用 AES 加密值,使用 PHP 随机会话秘密。 如果有任何例子,请告诉我?

这是我目前的代码。

    static void Main(string[] args)
    {
           AsymmetricCipherKeyPair keyPair;

        string protectedSecret = "U6XksFkhWV4.......eo3fRg==";
        var decodedSecret = Convert.FromBase64String(protectedSecret);

        string iv = "KLnP....wA==";
        var decodedIV = Convert.FromBase64String(iv);

        using (var reader = File.OpenText(@"c:\\private.key")) 
            keyPair = (AsymmetricCipherKeyPair)new PemReader(reader).ReadObject();

        var decryptPKIEngine = new Pkcs1Encoding(new RsaEngine());
        decryptPKIEngine.Init(false, keyPair.Private);

        var secret = Encoding.UTF8.GetString(decryptPKIEngine.ProcessBlock(decodedSecret, 0, decodedSecret.Length));

        var  protectedData = Convert.FromBase64String("f8..Po=");
      }

【问题讨论】:

  • 你尝试了什么?你有什么问题?
  • 现在我想使用密钥解密受保护的数据。我不确定如何!感谢您的帮助。
  • PHP 代码在加密时使用 AES 256 OFB 密码格式。

标签: c# encryption cryptography bouncycastle


【解决方案1】:

创建一个RijndaelManaged 实例并将其KeyIV 设置为您的字节数组。

然后,从CreateDecryptor() 创建一个CryptoStream,用您的密文字节数组包装一个MemoryStream
最后,从CryptoStream 读取明文。 (如果是实际文本,您可能需要使用 StreamReader)

【讨论】:

    【解决方案2】:

    试试这个替换把必要的字符串放在需要的地方

    static string PHPDecrypt() 
        {            
          byte[] keyBytes = Convert.FromBase64String("U6XksFkhWV4.......eo3fRg=="); //put in your real values here and below for iv and cipherTextBytes
          byte[] iv = Convert.FromBase64String("KLnP....wA=="");
          byte[] cipherTextBytes = Convert.FromBase64String("Put the EncryptedText here");
    
          var symmetricKey = new RijndaelManaged 
          { 
             Mode = CipherMode.CBC, 
             IV = iv, KeySize = 256, 
             Key = keyBytes, 
             Padding = PaddingMode.Zeros
          };
    
          using (var decryptor = symmetricKey.CreateDecryptor())
          using (var ms = new MemoryStream(cipherTextBytes))
          using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) {
            var plainTextBytes = new byte[cipherTextBytes.Length];
            int decryptedByteCount = cs.Read(plainTextBytes, 0, plainTextBytes.Length);
            return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
          }
        }
    

    【讨论】:

    • 你的实际密钥大小是多少.. 128,256, 1024..ect.. 你在最初的帖子中没有指定..
    • 大小为256。PHP代码在加密时使用AES 256 OFB密码格式。
    • 我仍然收到“指定的密钥不是此算法的有效大小。”。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多