【发布时间】:2016-11-01 21:37:30
【问题描述】:
如何有效地混淆 0.00 ~ 9999.99 范围内的数字
- 11.68
- 6.84
- 7.99
- 7.00
所以大小相似的数字的值的微小差异不会立即可见?
我考虑将每个数字分成整数和小数部分,并将它们用作坐标(例如11.68 → (11, 68))并将它们转换为极坐标,这很好,但我仍然需要两个值来存储它们。
您知道将小数 (6,2) 转换为另一个数字(可以像 float 甚至是 int)并返回仅依赖于 T-SQL math functions 吗?
我想在价值观和拥有完整数据库访问权限的人之间再增加一道障碍,他们可能会倾向于分析他们看到的真实(未混淆)值,但相对懒惰学习 T-SQL 和研究“无意义的价值观”如何混淆后看到的,可以解码。
【问题讨论】:
-
你应该在这里给出一个合适的“混淆”的例子。你的意思是随机捏造它们吗?
-
@tadman – 是的,我的意思是即使在 0~9999 的可能范围内,人类大脑也无法轻易找到模式,大多数值在 6、7、8 左右。所以即使是半随机分布也可以直到它可以被解码回原来的十进制(6,2)数。
-
如果您要添加此类混淆以防止人们进入您的数据库时进行某种“解码”,那么您就是在打一场无法取胜的战斗。保护您的数据。不要让人靠近它。如果有人得到了损坏的数据以及您为解码它而制作的应用程序,那么您就白白完成了所有这些工作,只需一行代码即可撤消。这是一个傻瓜的差事。黑客并不懒惰。他们非常坚持。
-
@tadman – 我完全理解你的观点,我的想法也一样,但是,在这种情况下,这不是一个公司环境,在那里一切都可以保持在适当的角色和责任之下。如果有人可以离开一段时间思考“你为什么需要这个”并提出有趣的数学函数,我将不胜感激。就算我不会用,那至少看看这样的函数是怎么构造的吧。
-
这段代码很可能会在以后导致难以追踪的问题。如果这会在没有人注意到的值中引入少量错误,直到为时已晚?使用原始值。如果您需要加密(这可能是一个问题),请使用适当的加密方法进行加密,而不是使用一些自制的混淆器。
标签: tsql decimal obfuscation deobfuscation