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

本文关键字:解码 加密算法 程序 | 更新日期: 2023-09-27 18:00:25

我想为自己创建一个许可系统,并研究不同的加密算法来创建密钥。

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

Name-Expiry-NumberPcs转到->TmFtZS1FeHBpcnktTnVtYmVyUGNz

但我想把它加密到其他东西上,但它必须在程序中解码才能提供信息。

另一件需要考虑的事情是,我将使用PHP对密钥进行编码,以便从在线系统提供给客户,在那里他们可以将密钥输入C#程序。

有什么想法吗?

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

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

你可能想在这里做的是验证哈希:当你的程序在客户端的系统上运行时,使用"实时"参数值创建一个全新的哈希,并验证生成的哈希是否等于你作为密钥提供给客户端的哈希。

这意味着,当程序在客户端上运行时,您将无法在哈希中包含任何无法可靠发现的信息。不幸的是,"有效期"answers"件数"都属于这一类。

如果您需要验证这些信息,那么哈希是不合适的,您需要加密。加密有两种类型:对称加密和非对称加密。

对称加密意味着你的应用程序必须知道密钥,这样它才能解密验证码,这反过来意味着任何对这些东西的工作原理有一定了解的人都可以破解它,并生成他们想要的任何验证码。

在非对称加密中,您有一个私钥(用于加密)和一个公钥(用于解密)。如果你让这个公钥对每个人都可用,那就没有问题,所以用这种方法就不能为你的程序制作密钥。

当然,这并不意味着你的应用程序不会被破解,因为修改托管应用程序的代码以完全跳过代码验证确实很容易。

你问的这个问题真的很棘手,而且没有明确的答案。你可能想看看这个问题:https://stackoverflow.com/questions/5132943/licensing-system-for-net并按照SO上的数十个链接找到类似的问题。

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

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

但是,由于您需要将密钥嵌入到客户端中,任何有能力的破解者都可以为您的程序编写密钥生成程序。

您可以使用非对称加密来避免嵌入密钥问题。但这会导致许可证密钥非常长。它可以防止钥匙,但不能防止裂缝。

我建议您使用第三方软件进行授权。或者干脆把它完全忽略掉,因为它会被破解,除非你的软件太无趣了,没有人打扰。

我在C#中做过SHA256(请参阅System.Security.Cryptography)。但是,我不认为哈希应该是可解码的。其目的是对敏感的东西(如密码)进行散列,然后将相同的散列例程应用于另一个值,并比较这两个散列。

您似乎在寻找加密算法(例如AES)。这也可在系统中获得。安全密码学和许多其他算法一样。

开箱即用。NET提供了大量符合标准密码学的安全算法库。查看System上的文档。安全加密并选择最适合您的算法。

Convert类具有用于将字符串转换为Base64和从Base64转换字符串的静态方法,因此在中也没有问题。NET。

我觉得你的掩护很好。只要确保你选择了一些你觉得舒服的东西。要明白,当你选择哈希算法时,你将无法"取消哈希"输出,只能进行比较。

根据定义,"哈希"无法解码,尽管可能会进行一些暴力破解。

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

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