使用SharpAESCrypt加密字符串
我决定在C#中使用SharpAESCrypt AES加密实现。 根据他们的文档( https://www.aescrypt.com/sharp_aes_crypt.html ),您应该能够使用静态方法,提供密码字符串,纯文本输入流和输出流。 我从输出流中获得的数据似乎都是零。
我怀疑我做错了将字符串转换为流并返回。 任何人都可以看到下面代码明显错误的任何内容吗? (它编译并运行,但newByteArray最后填充0)
private void encryptMemStream() { byte[] byteArray = Encoding.UTF8.GetBytes(DecryptedTB.Text); using (MemoryStream plainText = new MemoryStream(byteArray)) { using (MemoryStream encryptedData = new MemoryStream()) { //plainText.Write(byteArray, 0, byteArray.Length); SharpAESCrypt.Encrypt(PasswordTB.Text, plainText, encryptedData); encryptedData.Position = 0; byte[] newByteArray = new byte[encryptedData.Length]; newByteArray = encryptedData.ToArray(); EncryptedTB.Text = Encoding.UTF8.GetString(newByteArray); } } }
编辑:此代码的本机实现使用fileStreams,但它也应该与MemoryStreams一起使用。 我将测试文件流并在此处添加我的结果。
更多编辑:
因此,当您使用文件流时,您可以调用此代码
//Code from the AES Crypt Library public static void Encrypt(string password, string inputfile, string outputfile) { using (FileStream infs = File.OpenRead(inputfile)) using (FileStream outfs = File.Create(outputfile)) Encrypt(password, infs, outfs); }
哪个调用我直接调用的函数
//Code from the AES Crypt Library public static void Encrypt(string password, Stream input, Stream output) { int a; byte[] buffer = new byte[1024 * 4]; SharpAESCrypt c = new SharpAESCrypt(password, output, OperationMode.Encrypt); while ((a = input.Read(buffer, 0, buffer.Length)) != 0) c.Write(buffer, 0, a); c.FlushFinalBlock(); }
使用MemoryStream和FileStream显然有一些细微的区别,我不明白。 FileStream工作正常,而MemoryStream返回一个空白数组…
快速的代码审查揭示了一些事情,包括从讨论中看起来似乎是您面临的主要问题。 有问题的一行是
EncryptedTB.Text = Encoding.UTF8.GetString(newByteArray);
这一行是在newByteArray中获取二进制数据,并告诉你的代码它是一个有效的UTF8字节数组。 有可能它几乎肯定不会是有效的UTF8。 它的一部分可能是(例如标题),但实际加密的数据不会,因此您不应该使用此方法来获取字符串。
如果您需要一个可打印的字符串放入某种文本框中,那么对二进制数据执行此操作的正确方法是通过base64编码。
EncryptedTB.Text = Convert.ToBase64String(newByteArray);
Base64编码有效地采用三个字节(24位)的组,并将它们转换为四个字符的组。
我在这里的另一个注意事项是,在这两行中:
byte[] newByteArray = new byte[encryptedData.Length]; newByteArray = encryptedData.ToArray();
声明一个字节数组并为其分配一个新数组。 然后,您立即放弃这个,以支持encryptedData.ToArray()
中的数组。 这不会将数据放入由new byte[encryptedData.Length]
分配的数组中,而是创建一个新数组并将其放入newByteArray
变量中。 更好的是做到:
byte[] newByteArray = encryptedData.ToArray();
完整的工作代码如下:
上述就是C#学习教程:使用SharpAESCrypt加密字符串分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
byte[] byteArray = Encoding.UTF8.GetBytes(sourceText); Byte[] newByteArray; using (MemoryStream plainText = new MemoryStream(byteArray)) { using (MemoryStream encryptedData = new MemoryStream()) { SharpAESCrypt.Encrypt(password, plainText, encryptedData); newByteArray = encryptedData.ToArray(); } } EncryptedTB.Text = Convert.ToBase64String(newByteArray);
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1005670.html