我在这种类型的事情上没有经验,所以我甚至不确定关键字(因此标题)。基本上我需要一个双向函数
encrypt(w,x,y) = z
decrypt(z) = w, x, y
Where w = integer
x = string (username)
y = unix timestamp Z=是一个8位数(可能包括字母,spec还没有)。
我希望z不容易猜测,也不容易证实。速度不是什么大问题,安全也不是。跟踪一对一的关系是主要的要求。如有任何资源或方向,将不胜感激。
编辑
谢谢你的回答,学到了很多东西。因此,澄清,8个字符是唯一的硬要求,以及链接W <-> Z的能力。用户名(Y)和时间戳(Z)将被认为是锦上添花的蛋糕。
如果可能的话,我想从数学上来做这个,而不是做一些数据库查找。
如果我今晚必须完成这个任务,我可以找到一个合适的散列算法,并使用一个查找表。我只是想扩大我对这类事情的理解,看看我是否能用数学方法去做。
发布于 2009-08-25 20:13:39
您只需要用私钥加密(w,x,y)的序列化。使用相同的私钥解密它。
在任何情况下,z的大小不能像您所做的那样简单地被限制,因为它取决于序列化的大小(因为它需要两种方式,所以压缩是有限制的,这取决于熵)。
而且您并不是在寻找散列函数,因为它显然会丢失一些信息,并且您将无法逆转它。
编辑:由于z的大小是一个硬限制,您需要将输入限制为8个字节,并选择使用64位(或更少)块大小的加密技术。河豚和三重DES使用64位块,但请记住,这些算法没有得到与AES相同的检查。
如果您想要一些非常简单和非常不安全的东西,只需使用一个秘密密钥xor您的输入即可。
发布于 2009-08-25 20:13:56
加密与散列
这是一个加密问题,因为需要恢复原始信息。密码散列的质量取决于反向哈希和恢复原始信息的困难程度,因此散列在这里不适用。
要执行加密,需要一些关键材料。加密算法很多,但主要分为两大类:对称加密算法和非对称加密算法。
应用程序
这里的应用程序不清楚。但是,如果您正在“加密”某些信息并将其发送到某个地方,然后再将其拿回来并进行处理,则对称加密是可行的方法。例如,假设您希望在某个HTML链接中包含的参数中编码应用程序中的用户名、IP地址和某些标识符。当用户单击该链接时,该参数将被传回给您的应用程序,并对其进行解码以恢复原始信息。这非常适合对称加密,因为发送方和接收方是同一方,密钥交换是不操作的。
背景
在对称加密中,发送方和接收方需要知道相同的密钥,但要对其他人保密。作为一个简单的例子,两个人可以见面,并决定一个密码。后来,他们可以用这个密码把他们的电子邮件保密。然而,任何无意中听到密码交换的人都可以监视他们;交换必须通过一个安全的渠道进行.但是,如果您有一个安全的通道开始,您将不需要交换一个新的密码。
在非对称加密中,每一方都创建一对密钥。一个是公开的,可以免费分发给任何想要发送私人信息的人。另一个是私人的。只有邮件接收方知道该私钥。
对称加密的一个很大的优点是它速度快。所有设计良好的协议都使用对称算法加密大量数据.缺点是很难安全地交换密钥--如果你不能在一个安全的地方(实际上或物理上)“碰面”来商定密码,那该怎么办?
由于公钥可以自由共享,所以两个人可以在不安全的通道上交换私有消息,而无需事先商定密钥。然而,非对称加密的速度要慢得多,因此它通常用于对对称密钥进行加密或对对称密码执行“密钥协商”。SSL和大多数加密协议都经过握手,其中使用非对称加密来设置对称密钥,该密钥用于保护会话的其余部分。
发布于 2009-08-25 20:16:45
你可能做不到。
假设w是32位,x支持至少8个大小写不敏感的ASCII字符,所以至少37位,y是32位(将您带到2038年,而31位甚至现在还不支持)。
因此,总共至少有101位数据。你想把它存储成8位数的数字。从数学上讲,不可能从更大的集合到更小的集合创建可逆函数,因此每“数字”需要存储超过12.5位。
当然,如果您转到超过8个字符,或者您的字符是16位unicode,那么您至少有一个机会。
https://stackoverflow.com/questions/1330612
复制相似问题