c# - 使用tripdes算法解密XML文件
问题描述
我们有一些加密的 xml 文件,其中包含以下类型的字符,例如:$¹QƨJiå•Á@ܶĺµé)‰ï¦MSš¨íÄ;GfóûÇsHte;2Ð_。谁能指导我们如何使用 C# 中的 TripleDes 算法解密此类文件内容。
解决方案
已经使用 DES 加密而不是三重 DES,希望对您有所帮助
提醒一下,DES 是一种对称加密,这意味着使用单个密钥来加密和解密数据。下面介绍如何使用DES加密解密
创建资源文件并将其命名为 CryptoKeys
将以下字符串添加到 CryptoKeys 文件
DesVector:0x11, 0x45, 0x47, 0x61, 0x12, 0xbc, 0xad 0xfc:;
DesKey:0xff, 0x12, 0x63, 0xa, 0x16 0xcf, 0xaf, 0xfb;
创建静态类来管理加密和解密
public static class CryptoHelper
{
//Init the key and Vector
public static void InitDESKeys()
{
try
{
MemoryStream tempStream = new MemoryStream();
string[] charkey = Resources.CryptoKeys.DesKey.Split(',');
string[] chariv = Resources.CryptoKeys.DesVector.Split(',');
MemoryStream MemoryStreamkey = new MemoryStream(DesKey);
MemoryStream MemoryStreamiv = new MemoryStream(DesVector);
foreach (string item in charkey)
{
MemoryStreamkey.WriteByte(Convert.ToByte(item, 16));
}
foreach (string item in chariv)
{
MemoryStreamiv.WriteByte(Convert.ToByte(item, 16));
}
}
catch (Exception ex)
{
}
}
//Create function DESEncrypt to manage the encryption
public static string DESEncrypt(string sourceData)
{
try
{
byte[] sourceDataBytes = System.Text.Encoding.Unicode.GetBytes(sourceData);
MemoryStream tempStream = new MemoryStream();
DESCryptoServiceProvider encryptor = new DESCryptoServiceProvider();
CryptoStream encryptionStream = new CryptoStream(tempStream, encryptor.CreateEncryptor(DesKey, DesVector), CryptoStreamMode.Write);
encryptionStream.Write(sourceDataBytes, 0, sourceDataBytes.Length);
encryptionStream.FlushFinalBlock();
byte[] encryptedDataBytes = tempStream.GetBuffer();
return Convert.ToBase64String(encryptedDataBytes, 0, (int)tempStream.Length);
}
catch (Exception ex)
{
throw new Exception("Unable to encrypt data.");
}
}
//Create function DESDecrypt to manage the decryption
public static string DESDecrypt(string sourceData)
{
try
{
byte[] encryptedDataBytes = Convert.FromBase64String(sourceData);
MemoryStream tempStream = new MemoryStream(encryptedDataBytes, 0, encryptedDataBytes.Length);
DESCryptoServiceProvider decryptor = new DESCryptoServiceProvider();
CryptoStream decryptionStream = new CryptoStream(tempStream, decryptor.CreateDecryptor(DesKey, DesVector), CryptoStreamMode.Read);
byte[] bytesCryptedData = new byte[tempStream.Length];
decryptionStream.Read(bytesCryptedData, 0, (int)tempStream.Length);
var CryptedDataText = System.Text.Encoding.Unicode.GetString(bytesCryptedData);
return CryptedDataText;
}
catch (Exception ex)
{
throw new Exception("Unable to encrypt data.");
}
}
}
在主类中调用加密
static void Main(string[] args)
{
CryptoHelper.InitDESKeys();
string strText==Strin.Empty();
strText="Text to decrypt";
string encryptedText=CryptoHelper.DESEncrypt(strText);
string decryptedText=Strin.Empty();
decryptedText=CryptoHelper.DESDecrypt(strText);
}
推荐阅读
- docker - 无法登录 Play-with-docker 上的实例之间的私有注册表
- java - 为 1.12.2 编写 minecraft 客户端,启动时出现错误 NoSuchElementException
- javascript - 通过使用 javascript 转换数据类型从字符串创建数组
- java - 为什么在 ForEach 语句中无法解析 Java 变量?" 错误出现在我的 JSP 中,因为它无法解析为变量?
- recursive-query - Postgresql磁盘空间占用限制?
- r - 将 Chi 测试添加到 R 中的 plot_stackfrq
- sttp - sttp 的 http4s-backend (scala 3) 在哪里?
- css - 为什么这个 3d css 动画不能在移动设备上运行?
- eclipse - 当我使用 NPM 安装 SASS 时,我的计算机上的可执行文件在哪里?
- c# - 直接转换数组或使用 System.Linq.Cast 有什么区别?