我正在编写一种检查客户序列号是否与我的硬编码号匹配的方法。有没有办法让这个难以阅读,以防不受欢迎的人得到他们的代码?
我在java工作。
例如(伪代码)
if(x!= y)跳出代码并返回错误
干杯,道歉,如果这有点奇怪
答案 0 :(得分:19)
通过默默无闻的安全始终是一个坏主意。你不需要避免它,但你不应该完全相信它。
使用您在启动服务时键入的密钥加密序列号,或者只将序列号指定为十六进制或base64,而不是ASCII。
答案 1 :(得分:7)
执行此操作的常规方法是使用哈希。
根据定义,从哈希来看,几乎不可能推导出原始代码。
答案 2 :(得分:6)
使代码看起来很复杂以避免被黑客攻击永远不会有帮助!
答案 3 :(得分:1)
您可以尝试SHA1或其他一些单向加密(MD5不太安全,但它非常好)。不要这样做:
if (userPassword equals myHardCodedpassword)
这样做:
if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword)
因此,代码阅读器只能看到加密(非常非常难以解密)的值。
答案 4 :(得分:0)
答案 5 :(得分:0)
有一个wikipedia article on code obfuscation。也许那里的技巧可以帮助你=)
答案 6 :(得分:0)
您可以实现其他方法,而不是尝试使代码变得复杂,而不会暴露您的硬编码序列号。
尝试将硬编码的数字存储在某个永久位置作为加密字节数组。这样就不可读了。为了比较,用相同的算法加密客户端串行代码并进行比较。