C# 使用带有共享密码和特定salt值的OpenSSL AES256加密字符串
在我的c#程序(如下所示)中,我使用以下方法对字符串进行加密,然后通过internet将其传输到另一台服务器进行进一步处理。现在我必须制作一个bash脚本来完成完全相同的事情,但是我以前几乎从未接触过linux服务器,让我们在linux中使用加密吧 目前我已经尽可能地做到了这一点,但由于远程服务器不接受它,我想我可能忘记了一些重要的事情C# 使用带有共享密码和特定salt值的OpenSSL AES256加密字符串,c#,bash,openssl,aes,C#,Bash,Openssl,Aes,在我的c#程序(如下所示)中,我使用以下方法对字符串进行加密,然后通过internet将其传输到另一台服务器进行进一步处理。现在我必须制作一个bash脚本来完成完全相同的事情,但是我以前几乎从未接触过linux服务器,让我们在linux中使用加密吧 目前我已经尽可能地做到了这一点,但由于远程服务器不接受它,我想我可能忘记了一些重要的事情 encodedValue=$(echo $stringValue| openssl enc -aes-256-cbc -a -pass pass:$shared
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 ' ' )
就我已经看到的差异而言,我并没有对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());
}
}
尝试添加
-S
参数。您好,我已经试过了,但是我在c#应用程序中使用的salt对于OpenSSL来说太大了。至少这是他们的错误告诉我的:“十六进制字符串太长,十六进制salt值无效”salt实际上在c#代码中被接受,但在openssl版本中不被接受。。。关于如何获得相同的工作价值有什么想法吗?