在我的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());
}
}