Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C#解密这个用ruby管理的Rijandel?_C#_Ruby_Rijndaelmanaged - Fatal编程技术网

如何从C#解密这个用ruby管理的Rijandel?

如何从C#解密这个用ruby管理的Rijandel?,c#,ruby,rijndaelmanaged,C#,Ruby,Rijndaelmanaged,显然,钥匙和iv已改为所有“一”,以保护罪犯 我在这里试过其他几篇文章,但都没用 我想我应该继续展示我正在尝试使用的ruby openssl代码: static byte[] keyBytes = new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

显然,钥匙和iv已改为所有“一”,以保护罪犯

我在这里试过其他几篇文章,但都没用

我想我应该继续展示我正在尝试使用的ruby openssl代码:

 static byte[] keyBytes = new byte[] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
                                              1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
                                              1, 1, 1, 1, 1, 1, 1, 1
                                            };
    static byte[] iv = new byte[] { 1, 1, 1, 1 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

    static SymmetricAlgorithm getKey()
    {
        RijndaelManaged key = new RijndaelManaged();
        key.Key = keyBytes;
        key.IV = iv;
        return key;
    }

    static string Encrypt(string PlainText)
    {
        SymmetricAlgorithm key = getKey();
        MemoryStream ms = new MemoryStream();
        CryptoStream encStream = new CryptoStream(ms, key.CreateEncryptor(), CryptoStreamMode.Write);
        StreamWriter sw = new StreamWriter(encStream);
        sw.WriteLine(PlainText);
        sw.Close();
        encStream.Close();
        byte[] buffer = ms.ToArray();
        ms.Close();
        return Convert.ToBase64String(buffer);
    }

    static string Decrypt(string encrypted)
    {
        SymmetricAlgorithm key = getKey();
        byte[] CypherText = Convert.FromBase64String(encrypted);
        MemoryStream ms = new MemoryStream(CypherText);
        CryptoStream encStream = new CryptoStream(ms, key.CreateDecryptor(), CryptoStreamMode.Read);
        StreamReader sr = new StreamReader(encStream);
        string val = sr.ReadLine();
        sr.Close();
        encStream.Close();
        ms.Close();
        return val;
    }

Ruby的OpenSSL模块在默认情况下使用PKCS5类型填充()。但是MicrosoftRJ管理使用PKCS7作为默认值。Ruby模块中支持PKCS7,因此您可能只想继续使用它()。就个人而言,由于加密非常挑剔,我喜欢手动设置每个选项,而不是默认设置,即使我使用默认设置只是为了确保两端的选项相同。我以前用C#/PHP做过这件事,请查看我的帖子,看看这是否有帮助()我完成的解决方案作为第二个答案发布。

您在ruby端使用的是什么库?openssl,但我会使用任何东西。我只需要把数据原封不动地拿回来。你是说我应该直接使用OpenSSL::PKCS7类来解密?我以前从来没有这样做过,但我会试一试,然后再打给你。哈,好吧,我完全迷路了。我根本不知道怎么用这个东西。你能想出一个代码示例吗?对不起,我不是真的编写ruby。。。但我环顾四周寻找了一个例子,我认为这可能很接近:您的相关行可能是加密的\u data=OpenSSL::PKCS7::encrypt([@paypal\u cert],signed\u data.to\u der,cypher,OpenSSL::PKCS7::BINARY)
def Crypt.decrypt(encrypted_data, key, iv, cipher_type)
    aes = OpenSSL::Cipher::Cipher.new(cipher_type)
    aes.decrypt
    #aes.padding = 1
    aes.key = key
    aes.iv = iv if iv != nil
    aes.update(encrypted_data) + aes.final  
  end