如何将资源文件更改为自定义格式
本文关键字:自定义 格式 源文件 资源 | 更新日期: 2023-09-27 17:55:56
我曾经在Microsoft的XNA中制作游戏。XNA内置了一个ContentPipeline项目,可以自动将所有图像文件构建到。XNB 文件。这样做的好处是用户不能简单地修改图像文件(例如在 Paint 中)。
现在我正在使用 C#/OpenTK 进行编码,我使用 Visual Studio 中的"复制到输出"功能来复制图像、声音和字体文件,以供应用程序在运行时使用。但是,我失去了自定义格式授予的保护。
我的问题是我怎样才能创建类似的东西?是否有我可以使用的现成库,或者我可以编写的代码来创建它?
压缩对我来说并不是特别重要 - 只需将扩展更改为自定义内容即可。
这扩展了 Kyle 的回答和你向他提出的关于加密例程的问题。
如果你想要一个简单的加密/解密模式,你可以使用这个。keyString 是您的 Salt,它允许您稍后解密数据。我从一篇关于加密的博客文章中得到了这段代码,虽然今天可能有更好的例程,但这个效果很好。
public static byte[] EncryptData(string keyString, byte[] dataToEncrypt)
{
if (keyString.IsNullOrEmptyTrimmed())
throw new ArgumentNullException("keyString", "You must provide a key string for salting.");
if (dataToEncrypt == null)
return null;
UTF8Encoding utf8 = new UTF8Encoding();
byte[] encryptedData;
MD5CryptoServiceProvider hashProvider = new MD5CryptoServiceProvider();
byte[] tdesKey = hashProvider.ComputeHash(utf8.GetBytes(keyString));
TripleDESCryptoServiceProvider tdesAlgorithm = new TripleDESCryptoServiceProvider();
tdesAlgorithm.Key = tdesKey;
tdesAlgorithm.Mode = CipherMode.ECB;
tdesAlgorithm.Padding = PaddingMode.PKCS7;
try
{
ICryptoTransform encryptor = tdesAlgorithm.CreateEncryptor();
encryptedData = encryptor.TransformFinalBlock(dataToEncrypt, 0, dataToEncrypt.Length);
}
finally
{
tdesAlgorithm.Clear();
hashProvider.Clear();
}
return encryptedData;
}
public static byte[] DecryptData(string keyString, byte[] encyptedData)
{
if (encyptedData == null)
return null;
byte[] decryptedData;
UTF8Encoding utf8 = new UTF8Encoding();
MD5CryptoServiceProvider hashProvider = new MD5CryptoServiceProvider();
byte[] tdesKey = hashProvider.ComputeHash(utf8.GetBytes(keyString));
TripleDESCryptoServiceProvider tdesAlgorithm = new TripleDESCryptoServiceProvider();
tdesAlgorithm.Key = tdesKey;
tdesAlgorithm.Mode = CipherMode.ECB;
tdesAlgorithm.Padding = PaddingMode.PKCS7;
try
{
ICryptoTransform decryptor = tdesAlgorithm.CreateDecryptor();
decryptedData = decryptor.TransformFinalBlock(encyptedData, 0, encyptedData.Length);
}
finally
{
tdesAlgorithm.Clear();
hashProvider.Clear();
}
return decryptedData;
}
最简单的选择是根本不用担心,因为自定义扩展无论如何都不会提供任何保护。许多程序会忽略扩展名,并让您无论如何编辑文件。
如果确实需要一些(伪)保护,常见的选项是加密文件并在运行时解密它们。但是,恶意用户仍可以通过对代码进行反向工程来访问文件。