- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在根据以下逻辑使用加密的以下代码创建许可证:
private void SaveLicenseInfoWithEncryption(LicenseInfo obj)
{
string strLicenseString = "Kamran";
//string strLicenseString = JsonConvert.SerializeObject(obj, Formatting.None);
byte[] buffer = new byte[strLicenseString.Length * sizeof(char)];
Buffer.BlockCopy(strLicenseString.ToCharArray(), 0, buffer, 0, buffer.Length);
DESCryptoServiceProvider desCryptSrvckey = new DESCryptoServiceProvider
{
Key = new UTF8Encoding().GetBytes(ConfigurationManager.AppSettings["EncryptionKey"])
};
desCryptSrvckey.IV = desCryptSrvckey.Key;
using (MemoryStream stmCipherText = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(stmCipherText, desCryptSrvckey.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(buffer, 0, buffer.Length);
cs.FlushFinalBlock();
string licPath = Path.Combine(txtFolderPath.Text, @"Test.lic");
File.WriteAllBytes(licPath, stmCipherText.ToArray());
MessageBox.Show(@"License File Generated Successfully");
}
}
}
许可证生成正常(我暂时放入了示例文本)。问题是我正在尝试解密我的许可证,但我遇到了一些无效行为。
我的代码是:
private void button1_Click(object sender, EventArgs e)
{
var fileDialog = new OpenFileDialog
{
Filter = @"License Files|*.lic",
Title = @"Select a License File"
};
if (fileDialog.ShowDialog() == DialogResult.OK)
{
byte[] buffer = File.ReadAllBytes(fileDialog.FileName);
DESCryptoServiceProvider desCryptSrvckey = new DESCryptoServiceProvider
{
Key = new UTF8Encoding().GetBytes(ConfigurationManager.AppSettings["EncryptionKey"])
};
desCryptSrvckey.IV = desCryptSrvckey.Key;
using (MemoryStream encryptedStream = new MemoryStream(buffer))
{
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(encryptedStream, desCryptSrvckey.CreateDecryptor(), CryptoStreamMode.Read))
{
using (StreamWriter sw = new StreamWriter(ms))
{
using (StreamReader sr = new StreamReader(cs))
{
sw.Write(sr.ReadToEnd());
sw.Flush();
}
ms.Position = 0;
txtContent.Text = new StreamReader(ms).ReadToEnd();
}
}
}
}
}
}
在监 window 口中,我得到文本 K\0a\0m\0r\0a\0n\0
但文本框中的最终输出只是 K
。
最佳答案
丢失BlockCopy
并将字符串转换为UTF-8:
buffer = Encoding.UTF8.GetBytes(strLicenseString);
或者使用您当前的代码并告诉读者文本是 UTF-16(这就是内部字符串编码,当您进行原始 block 复制时最终会出现在您的缓冲区中)
new StreamReader(cs, Encoding.Unicode)
您还可以简化为:
...
desCryptSrvckey.IV = desCryptSrvckey.Key;
using (MemoryStream encryptedStream = new MemoryStream(buffer))
using (CryptoStream cs = new CryptoStream(encryptedStream, desCryptSrvckey.CreateDecryptor(), CryptoStreamMode.Read))
using (StreamReader sr = new StreamReader(cs))
{
txtContent.Text = sr.ReadToEnd();
}
关于c# - DESCryptoServiceProvider 解密不起作用。获取包含\0 个字符且只有第一个字母的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893730/
美好的一天,我需要使用 base64 编码加密一些文本并将编码后的数据传递给 .NET 应用程序。 .NET 应用程序使用以下形式的编码和解码。我试过这个 Equivalent to CryptoSt
我所能确定的是,其中一个是所有“DES”算法的 BC,后者是 DES 算法的加密服务提供程序实现的包装器。 我问的原因是我正在复习 .Net Security,而 MS 官方培训书只是指 DES 类,
我正在根据以下逻辑使用加密的以下代码创建许可证: private void SaveLicenseInfoWithEncryption(LicenseInfo obj)
这是一个初学者问题, 每次我在互联网上搜索时,使用 DESCryptoServiceProvider 函数解密总是返回一个字符串。 我们怎样才能得到返回的byte[]? 这是代码。感谢您的帮助。 DE
我是一名优秀的程序员,十分优秀!