将值映射到其他值并返回

想象一个价值,比如'1234'。我想将该值映射到另一个值,比如'abcd'。约束: 目标值的长度等于起始值 映射应该是唯一的。例如。 1234应该只映射到abcd和viseversa 映射过程应该(非常)难以猜测。例如。乘以2确实算数 映射应该是可逆的 起始值是整数 目标值可以是任何类型 这应该是一个基本算法,最终我会用Ruby编写它,但这里不用担心。 我正在考虑以下几点:
SECRET = 1234
def to(int)
  SECRET + int * 2
end

def fro(int)
  (int - SECRET)  / 2
end
显然这违反了约束1和3。 最终目标是匿名化我的数据库中的记录。我可能在想这个。     
已邀请:
首先,我宁愿认为你的目标太雄心勃勃了:为什么要约束6? 其次,你需要的是技术上来自整数域的双射。 第三,你的约束3违背了Kerkhoff的原则。使用由密钥管理的众所周知的算法会更好,即使您知道大量整数的结果,也很难得出密钥。 第四,你对什么匿名反对?如果您正在处理个人信息,您将如何防止统计分析显示Xyzzy实际上是John Doe,基于与其他数据的关系?有一些关于对抗这种攻击向量的研究(google用于例如'k-anonymization')。 第五,使用现有的加密原语而不是试图发明自己的加密原语。存在加密算法(例如,密码块链接模式下的AES),经过充分测试 - 所有现代平台都支持AES,也可能是Ruby。但是,加密仍然没有强烈意义上的记录匿名性。     
你可能值得提供一些关于你想要实现什么的更多细节。大概你担心一些邪恶的人掌握你的数据,但这个邪恶的人是否也有可能访问访问你的数据库的代码?什么阻止他们通过检查您的代码来学习算法? 如果你真的想要匿名化数据,那么这通常是单向的(名称被删除,信用卡值被删除等)。如果您正在尝试加密数据库的内容,那么许多数据库引擎提供了经过良好测试的机制来执行此操作。例如: 在MSSQL中处理加密数据的最佳实践 数据库加密 使用产品的加密机制总比使用自己的加密机制更好。     

要回复问题请先登录注册