在源代码中存储加密密钥的安全性如何?

本文关键字:安全性 密钥 源代码 存储 加密 | 更新日期: 2023-09-27 18:11:18

这个加密类是否足够安全?或者有人可以反汇编我的二进制文件来找到密钥和IV?我用它来解密许可证文件,所以它不能轻易被破坏是很重要的。

internal static class Encryptor
{
  // Actual values are put here in my source
  private static readonly byte[] Key = { 0, 0, 0, 0, 0, 0, 0, 0 };
  private static readonly byte[] Iv = { 0, 0, 0, 0, 0, 0, 0, 0 };
  internal static String Encrypt(string source)
  {
    var des = new DESCryptoServiceProvider();
    var enc = des.CreateEncryptor(Key, Iv);
    var b = Encoding.ASCII.GetBytes(source);
    var encId = enc.TransformFinalBlock(b, 0, b.Length);
    return Convert.ToBase64String(encId);
  }
  internal static string Decrypt(string encrypted)
  {
    var des = new DESCryptoServiceProvider();
    var dec = des.CreateDecryptor(Key, Iv);
    var b = Convert.FromBase64String(encrypted);
    var decId = dec.TransformFinalBlock(b, 0, b.Length);
    return Encoding.ASCII.GetString(decId);
  }
}

这与这个问题和这个问题类似,但似乎都没有明确的答案(据我所知——我承认我是这个话题的完全初学者)。请建议。:)

在源代码中存储加密密钥的安全性如何?

是的,这很容易被打破。任何熟悉Reflector(或ILSpy、dotPeek等)等工具的开发人员都可以毫不费力地识别加密功能并找到密钥。拥有该程序集的人甚至可以直接调用Decrypt,而不必费心提取密钥。

是否足够安全?看情况,只有你能回答。如果这是为了授权,那就相当于在盒子上贴一个标签,上面写着"不要复制我的软件"。另一方面,制定一个健壮的许可方案,使经验丰富且坚定的攻击者难以攻破,这是一项艰巨的任务,您可能需要考虑是否值得为此付出努力。就我个人而言,我会把我的时间投入到使软件变得如此出色,以至于人们愿意为它付费,而不是阻止一小部分坏人未经许可使用它。

不,不安全。它很容易被破解,即使有混淆。有人可以很快地制作keygen

您可以通过使用公钥加密解决secret密钥问题,因此只有公共部分将包含在程序集中(而您将私钥保留给自己)。

OTOH有人可以用自己的公钥替换这个公钥…(制作一个补丁和一个keygen.)所以你需要更多一点来保护你的代码,例如代码签名会有所帮助。

创建一个安全的DRM不是一件容易的工作(实际上这是不可能的)。你可以投入更多的时间,而不是别人破解它所需要的时间。所以你可以:

a)用一个简单的让诚实的人诚实;

b)创建或购买(比你自己的便宜)一些复杂的解决方案,但不是100%安全-但这可以给你一些额外的安全时间来销售你的应用;

从编译后的程序集中窃取密钥是非常容易的。
您需要使用非对称加密(RSA)。

接下来,您将询问如何防止人们修改程序集以放入他们自己的公钥,或者删除整个许可证检查。