Java 使一行代码难以阅读

Java 使一行代码难以阅读,java,obfuscation,Java,Obfuscation,我写了一个方法来检查客户序列号是否与我的硬编码号码匹配。有没有一种方法可以使代码尽可能难以阅读,以防不受欢迎的人获得代码 我在java工作 例如(伪代码) 如果(x!=y)跳出代码并返回错误 如果这有点奇怪的话,干杯,道歉让代码看起来复杂以避免被黑客攻击是没有帮助的 使已发布代码的控制结构混乱 e、 g在不同变量下的代码中的随机点输入数字,并在某个随机点使它们等于x和y 有一个问题。也许这些技巧可以帮助你(=)通过默默无闻来确保安全永远是个坏主意。你不需要回避它,但你不应该只相信它 使用启动服务

我写了一个方法来检查客户序列号是否与我的硬编码号码匹配。有没有一种方法可以使代码尽可能难以阅读,以防不受欢迎的人获得代码

我在java工作

例如(伪代码)

如果(x!=y)跳出代码并返回错误


如果这有点奇怪的话,干杯,道歉

让代码看起来复杂以避免被黑客攻击是没有帮助的

使已发布代码的控制结构混乱

e、 g在不同变量下的代码中的随机点输入数字,并在某个随机点使它们等于x和y


有一个问题。也许这些技巧可以帮助你(=)

通过默默无闻来确保安全永远是个坏主意。你不需要回避它,但你不应该只相信它


使用启动服务时键入的密钥加密序列,或者只将序列指定为十六进制或base64,而不是ASCII。

您可以实现其他方法,而不公开硬编码序列号,而不是试图使代码复杂化


尝试将硬编码的数字作为加密字节数组存储在某个永久位置。那样的话就不可读了。为了进行比较,请使用相同的算法加密客户端串行代码并进行比较

通常的方法是使用散列

  • 创建串行代码的散列
  • 要验证客户端序列号,请使用相同的函数对其进行哈希
  • 如果哈希匹配,则序列是正确的,即使序列本身不在代码中

  • 根据定义,从散列中导出原始代码几乎是不可能的。

    您可以尝试SHA1或其他单向加密(MD5不太安全,但它相当不错)。不要这样做:

    if (userPassword equals myHardCodedpassword)
    
    这样做:

    if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword)
    

    因此,代码读取器只能看到加密的(并且很难解密)值。

    似乎这只会让感兴趣的人更加好奇。无论如何,你可能希望混淆比较发生的位置,以防止一些恶意黑客替换字节码进行相反的计算
    等于
    而不是
    notequals
    ;-)(无论如何,这更难)。