我需要一种加密机制

时间:2014-09-13 07:46:45

标签: c# encryption

我将Windows应用程序部署到某些客户端计算机上。他们将脱机运行。我需要确保他们无法将应用程序移动到另一台机器上。我能够为每个部署构建我的项目。

所以我的想法是:我编写了一个工具,用于获取计算机cpuID,对其进行加密,将其嵌入到我的应用程序代码中的静态变量中,构建并部署到客户端。然后在应用程序启动时,我将在这次使用应用程序本身获取cpuID并从该静态变量中解密加密的cpuID,检查它们是否匹配并允许或拒绝启动应用程序。所以我只会在应用程序代码中出现解密算法。

我需要确保即使他们对代码进行反向工程,他们也无法创建自己的加密cpuID并更改该静态变量。

我需要一个加密系统,我认为它必须是一个非对称系统,但我不确定,不好的人不应该通过查看解密来理解我加密cpuId的方式算法。

这样的事情是否可能?如果有可能是什么样的算法,我可以自己实现它们吗?或者有任何稳定的实施吗?

编辑:我要问的实际上是一种加密算法,这种算法无法从其decrpytion算法中推断出来。所以问题实际上并不是关于软件保护。我只是想解释一下我将如何使用它。

EDIT2:以下是我要做的事情。

哈希工具:

public string GetDeviceHashEncrypted(out RSParameters publicKey)
{
    var deviceHash = getComputerHash(); // combination of few things.
    using(var rsa = new RSACryptoServiceProvider())
    {
        publicKey = rsa.ExportParameters(false);
        return new UnicodeEncoding().GetString(rsa.Encrypt(deviceHash, false));
    }
}   

从哈希工具中获取公钥和加密数据后,我手动将它们写入客户端应用程序代码。并构建并部署到客户端。

客户端:

public static string EncryptedDeviceHash = ...; //encrypted version of device hash
public static RSAParameters PublicKey = ...; // public key generated by hash tool

...

public bool _validateDevice()
{
    var deviceHash = getComputerHash(); // combination of few things.
    using(var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(PublicKey);
        return rsa.Decrypt(EncryptedDeviceHash, false) == deviceHash;
    }
}

但由于公钥不是用于解密,因为我无法复制相同的加密字符串,所以我无法对此逻辑做任何事情。

0 个答案:

没有答案