【发布时间】:2015-12-15 15:23:51
【问题描述】:
我创建了(或多或少从网络重写)最短的程序来编码和解码字符串。
namespace crypto
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static string Encrypt(string toEncrypt, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
}
else
keyArray = UTF8Encoding.UTF8.GetBytes(key);
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateEncryptor();
byte[] resultArray =
cTransform.TransformFinalBlock(toEncryptArray, 0,
toEncryptArray.Length);
tdes.Clear();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
private static string Decrypt(string cipherString, bool useHashing)
{
byte[] keyArray;
byte[] toEncryptArray = Convert.FromBase64String(cipherString);
System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader();
string key = (string)settingsReader.GetValue("SecurityKey", typeof(String));
if (useHashing)
{
MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();
keyArray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));
hashmd5.Clear();
}
else
{
keyArray = UTF8Encoding.UTF8.GetBytes(key);
}
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
tdes.Key = keyArray;
tdes.Mode = CipherMode.ECB;
tdes.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = tdes.CreateDecryptor();
try
{
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
finally
{
tdes.Clear();
}
}
private void button1_Click(object sender, EventArgs e)
{
this.rtfENC.Text = Encrypt(this.rtfDEC.Text, true);
this.rtfDEC.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
this.rtfDEC.Text = Decrypt(this.rtfENC.Text, true);
this.rtfENC.Text = "";
}
}
它只有两种方法 Decrypt 和 Encrypt ,它按我的预期工作。我想知道我是否可以在 Linux 中创建具有完全相同功能的程序/脚本。或者也许更好的问题是如何做到这一点? bash 适合吗?我需要任何特殊/外部库、包吗?会不会很困难?
【问题讨论】:
-
Linux中有MONO。
-
清除 bash/ksh/csh 或其他脚本语言怎么样?
-
@zaph 如果答案有帮助,我(几乎)总是接受它。
-
建议:回顾你过去的答案,有几个似乎很适合接受。顺便说一句,几天后您可以接受自己的答案。我不是在谈论我的答案,它主要是最佳实践建议。