想象一个价值,比如'1234'。我想将该值映射到另一个值,比如'abcd'。约束:
这应该是一个基本的算法,最终我会用Ruby编写它,但这里不用担心。
我在考虑以下几点:
SECRET = 1234
def to(int)
SECRET + int * 2
end
def fro(int)
(int - SECRET) / 2
end
显然这违反了约束1和3。
最终目标是匿名化我的数据库中的记录。我可能在想这个。
答案 0 :(得分:4)
首先,我认为你的目标过于雄心勃勃:为什么要约束6?
其次,您需要的是技术上来自整数域的bijection。
第三,你的约束3与Kerkhoff's principle相反。使用由密钥控制的众所周知的算法会更好,即使您知道大量整数的结果,也很难导出密钥。
第四,你对什么匿名反对?如果您正在处理个人信息,您将如何防止统计分析显示Xyzzy实际上是John Doe,基于与其他数据的关系?有一些关于打击这种攻击媒介的研究(谷歌例如'k-anonymization')。第五,使用现有的加密原语而不是尝试发明自己的加密原语。存在加密算法(例如,cipher-block-chaining模式下的AES)经过充分测试 - 所有现代平台都支持AES,也可能是Ruby。但是,加密仍然不会给任何强烈意义上的记录匿名。
答案 1 :(得分:1)
你可能值得提供一些关于你想要实现什么的更多细节。大概你担心一些邪恶的人掌握你的数据,但这个邪恶的人是否也有可能访问访问你的数据库的代码?什么阻止他们通过检查代码来学习算法?
如果您真的想要匿名化数据,那么这通常是单向的(名称被删除,信用卡值被删除等)。如果您正在尝试加密数据库的内容,那么许多数据库引擎提供了经过良好测试的机制来执行此操作。例如:
Best practices for dealing with encrypted data in MSSQL
使用产品的加密机制总比使用自己的加密机制更好。