algorithm - 双向 key 加密/哈希算法

标签 algorithm encryption hash

我对这类事情没有任何经验,所以我什至不确定关键字(因此标题)。 基本上我需要一个双向函数

encrypt(w,x,y) = z

decrypt(z) = w, x, y

Where w = integer 
      x = string (username)
      y = unix timestamp 

而 z = 是一个 8 位数字(可能包括字母,规范还没有。)

我希望 z 不容易被猜测和验证。速度不是问题,安全性也不是。跟踪一对一关系是主要要求。 任何资源或方向将不胜感激。

编辑

谢谢大家的解答,学习了。所以要澄清一下,8 个字符是唯一的硬性要求,以及链接 W <-> Z 的能力。用户名 (Y) 和时间戳 (Z) 将被视为锦上添花。

如果可能的话,我想用数学方法来做这件事,而不是做一些数据库查找。

如果我今晚必须完成这个,我可以找到合适的哈希算法并使用查找表。我只是想扩展我对这类事情的理解,看看我是否可以在数学上做到这一点。

最佳答案

加密与散列

这是一个加密问题,因为需要恢复原始信息。密码散列的质量是根据散列的逆向和恢复原始信息的难易程度来判断的,因此这里不适用散列。

要执行加密,需要一些 key Material 。加密算法有很多种,但主要分为两大类:对称算法和非对称算法。

申请

这里的应用不是很清楚。但是,如果您要“加密”一些信息并将其发送到某个地方,然后再将其取回并对其进行处理,对称 加密是可行的方法。例如,假设您要将应用程序中的用户名、IP 地址和某些标识符编码为包含在某些 HTML 链接中的参数。当用户单击该链接时,该参数将传回您的应用程序,您对其进行解码以恢复原始信息。这非常适合对称加密,因为发送方和接收方是同一方,并且 key 交换是空操作。

背景

在对称加密中,发件人和收件人需要知道相同的 key ,但对其他人保密。举个简单的例子,两个人可以亲自见面,并决定密码。稍后,他们可以使用该密码将彼此的电子邮件保密。但是,任何偷听密码交换的人都可以监视他们;交换必须通过安全通道进行……但如果您一开始就有安全通道,则不需要交换新密码。

在非对称加密中,每一方创建一对 key 。一个是公开的,可以免费分发给任何想发送私有(private)消息的人。另一个是私有(private)的。只有消息接收者知道该私钥。

对称加密的一大优势是速度快。所有设计良好的协议(protocol)都使用对称算法来加密大量数据。缺点是安全地交换 key 可能很困难——如果您不能在安全的地方“会面”(虚拟地或物理地)以商定密码怎么办?

由于公钥可以自由共享,两个人可以通过不安全的 channel 交换私有(private)消息,而无需事先就 key 达成一致。然而,非对称加密要慢得多,因此它通常用于加密对称 key 或对对称密码执行“ key 协商”。 SSL 和大多数加密协议(protocol)都经过握手,其中使用非对称加密来设置对称 key ,该 key 用于保护对话的其余部分。

关于algorithm - 双向 key 加密/哈希算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1330612/

相关文章:

algorithm - 为什么贪心算法是启发式的,而不是元启发式的?

algorithm - 使用图形来翻译不同的表示

php - Joomla 中的外部登录验证

c# - 在 C# 中加密解密 AES CBC 256

c# - 将 .Net 4.5.1 中的 KeyDerivation.Pbkdf2 转换为 .Net 4.0

algorithm - 无法定义此算法的运行时间

ruby - 深度哈希反转算法(应该是 ruby )

encryption - 初始化向量(四)——更新频率

javascript - 在不引起重定向的情况下向 URL 添加片段?

java 哈希对象