使用OpenSSL AES256使用共享密码和特定salt值加密字符串

时间:2015-02-12 22:32:00

标签: c# bash openssl aes

在我的c#程序(如下所示)中,我使用以下方法加密字符串,然后通过互联网将其传输到另一台服务器进行进一步处理。现在我必须创建一个完全相同的bash脚本,但我以前几乎从未接触过linux服务器,让我们在linux中使用加密。

目前我已经设法尽可能地获得了这个,但由于它没有被远程服务器接受,我想我可能会忘记一些重要的事情。

encodedValue=$(echo $stringValue| openssl enc -aes-256-cbc -a -pass pass:$sharedSecret)
encodedValue=$( echo $encodedValue| tr -d ' ' )

# - base64 it
encodedValue=$( echo $(echo $encodedValue| base64) | tr -d ' ' )

就我已经看到的差异而言,我不是将Salt赋予openssl编码,但我没有找到任何方法使用OpenSSL。

任何人都可以指出我的方向或向我展示我做错了吗?

原始工作c#代码如下所示:

RijndaelManaged aesAlg = null;

try
{
    var key = new Rfc2898DeriveBytes(sharedSecret, Salt);

    aesAlg = new RijndaelManaged();
    aesAlg.Key = key.GetBytes(aesAlg.KeySize / 8);

    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
    using (var msEncrypt = new MemoryStream())
    {
        msEncrypt.Write(BitConverter.GetBytes(aesAlg.IV.Length), 0, sizeof(int));
        msEncrypt.Write(aesAlg.IV, 0, aesAlg.IV.Length);

        using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
        {
            using (var swEncrypt = new StreamWriter(csEncrypt))
            {
                swEncrypt.Write(plainText);
            }
        }
        outStr = Convert.ToBase64String(msEncrypt.ToArray());
    }
}

0 个答案:

没有答案
相关问题