双向密钥加密/哈希算法

jsk*_*ski 12 encryption algorithm hash

我对这类事情没有经验,所以我甚至不确定关键字(因此标题).基本上我需要一个双向功能

encrypt(w,x,y) = z

decrypt(z) = w, x, y

Where w = integer 
      x = string (username)
      y = unix timestamp 
Run Code Online (Sandbox Code Playgroud)

和z =是一个8位数字(可能包括字母,规格还没有.)

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

编辑

谢谢你的答案,学到了很多东西.因此,为了澄清,8个字符是唯一的硬性要求,以及链接W < - > Z的能力.用户名(Y)和时间戳(Z)将被认为是锦上添花.

如果可能的话,我想以数学的方式做这个,而不是做一些数据库查找.

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

eri*_*son 18

加密与散列

这是一个加密问题,因为需要恢复原始信息.加密哈希的质量是通过反转哈希和恢复原始信息的难度来判断的,因此哈希在这里不适用.

要执行加密,需要一些关键材料.有许多加密算法,但它们分为两大类:对称和非对称.

应用

这里的申请不清楚.但是如果你正在"加密"某些信息并将其发送到某个地方,然后将其取回并使用它做一些事情,那么对称加密就是可行的方法.例如,假设您要在某个HTML链接中包含的参数中对应用程序中的用户名,IP地址和某些标识符进行编码.当用户单击该链接时,该参数将传递回您的应用程序并对其进行解码以恢复原始信息.这非常适合对称加密,因为发件人和收件人是同一方,密钥交换是无操作.

背景

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

在非对称加密中,每一方都创建一对密钥.一个是公开的,可以免费分发给任何想要发送私人消息的人.另一个是私人的.只有邮件收件人知道该私钥.

对称加密的一大优势是速度快.所有设计良好的协议都使用对称算法来加密大量数据.缺点是安全地交换密钥可能很困难 - 如果你不能在一个安全的地方"虚拟或实际地""见面"以便同意密码呢?

由于可以自由共享公钥,因此两个人可以在不安全的频道上交换私人消息而无需事先就密钥达成一致.但是,非对称加密要慢得多,因此通常用于加密对称密钥或对对称密码执行"密钥协商".SSL和大多数加密协议都经过握手,其中非对称加密用于设置对称密钥,用于保护对话的其余部分.


ton*_*nfa 11

您只需要使用私钥加密(w,x,y)的序列化.使用相同的私钥解密它.

在任何情况下,z的大小都不能像你那样简单地限制,因为它取决于序列化的大小(因为它需要是双向的,你可以根据熵对压缩进行限制).

而且你不是在寻找哈希函数,因为它显然会丢失一些信息而你却无法逆转它.

编辑:由于z的大小是硬限制,您需要将输入限制为8个字节,并选择使用64位(或更少)块大小的加密技术.BlowfishTriple DES使用64位块,但请记住,这些算法没有像AES那样受到同样的审查.

如果你想要一些非常简单且非常不安全的东西,只需xor输入一个密钥即可.