可以在程序C#中解码的加密算法

时间:2011-06-23 12:56:10

标签: c# encryption licensing hash

我希望创建自己的许可系统,我正在研究不同的加密算法来创建密钥。

我的第一步是base64_encode 3个不同的字符串,例如:

Name-Expiry-NumberPcs转向 - > TmFtZS1FeHBpcnktTnVtYmVyUGNz

但后来我想把它加密到别的东西,但必须在程序中解码才能提供信息。

需要考虑的另一件事是我将使用PHP对密钥进行编码,以便通过在线系统向客户提供密钥,然后将密钥输入C#程序。

有什么想法吗?

5 个答案:

答案 0 :(得分:0)

你不需要哈希,因为哈希是一种方式。你想要某种加密。除非您使用非对称加密,否则您的加密实际上只是一个混淆,因为您将密钥放在用户可以访问它的位置。

在您的情况下,您可以首先对字符串进行UTF8编码以获取字节数组。然后使用AES加密该阵列,为您提供另一个字节数组。最后使用Base64对加密数据进行编码,以获得人类可读的字符串。

但是,由于您需要将密钥嵌入客户端,任何适度干练的破解者都可以为您的程序编写密钥。

您可以使用非对称加密来避免嵌入式密钥问题。但这导致了非常长的许可证密钥。它可以防止关键,但不会产生裂缝。

我建议您使用第三方软件进行许可。或者可能只是完全抛弃它,因为它会被破解,除非你的软件如此无趣,没有人会烦恼。

答案 1 :(得分:0)

哈希是一种单向操作:您无法解码哈希值。

您可能想要做的是验证哈希:当您的程序使用“实时”参数值在客户端系统上运行时创建一个全新的哈希值,并验证生成的哈希是否相等以你给客户的那个为钥匙。

这意味着当您的程序在客户端上运行时,您将无法在哈希中包含任何您无法可靠发现的信息。不幸的是,“失效日期”和“个人数量”属于这一类。

如果您需要验证此类信息,则哈希不合适,您需要加密。加密有两种形式:对称和不对称。

对称加密意味着您的应用程序必须知道密钥,以便它可以解密验证代码,这反过来意味着任何具有中等工作知识的人都能够破解它并生成任何密码。他们想要的验证码。

在非对称加密中,您有一个私钥(用于加密)和一个用于解密的公钥。如果您将此公钥提供给每个人都没有问题,因此使用此方法无法为您的程序创建keygen。

当然,这并不意味着您的应用程序可以安全地破解,因为修改托管应用程序的代码以完全跳过代码验证非常容易。

你提出的问题实际上是一堆蠕虫,而且没有明确的答案。您可能需要查看此问题:https://stackoverflow.com/questions/5132943/licensing-system-for-net并在此处关注类似问题的数十个链接。

答案 2 :(得分:0)

我在C#中完成了SHA256(参见System.Security.Cryptography)。但是,我不相信散列应该是可解码的。目的是对敏感内容(如密码)进行哈希处理,然后将相同的哈希例程应用于另一个值并比较两个哈希值。

您似乎在寻找加密算法(例如AES)。这在System.Security.Cryptography中也可用,还有许多其他算法。

答案 3 :(得分:0)

开箱即用,.NET提供了一系列符合标准加密算法的安全算法。查看System.Security.Cryptography上的文档,然后选择最适合您的算法。

Convert类有静态方法来转换字符串tofrom Base64,所以再一次,就你而言,你在.NET中没有任何问题。

我认为你被覆盖得非常好。只要确保你选择了一些你觉得舒服的东西。并且要明白,当您选择散列算法时,您将无法“取消”输出,只能进行比较。

答案 4 :(得分:0)

根据定义,“哈希”无法解码,但有些蛮力黑客行为是可行的。

如果您需要解码代码,则必须使用双向算法(例如AES或DES)。

如果你真的没有解码,只是检查你存储的哈希是否与用户输入匹配,那么你必须使用与存储哈希相同的算法对用户输入进行编码,并检查它们是否匹配(这是用于密码的常用方法)