虽然我正在使用RubyRails来解决这个特殊的问题,但具体问题并不是Ruby独有的。
我正在构建一个应用程序,它可以向多人发送群组mms消息,然后在其他人回复时处理这些文本。
该应用将为每个记录设置不同的号码,并且每个记录可以参与多个群组对话。
比如说 record_1
可以与 user_1, user_2
,但也可以参与单独的对话,与 user_2, user_3
和 record_2
可以单独与 user_1, user_2
.
当我发送消息时,字段类似于:
{
from: "1234566789",
to: [
"1111111111",
"2222222222",
...
],
body: "..."
}
其中 from
是我的应用号,而 to []
是参与对话的其他所有人的电话号码阵列。
当其他参与者之一回复群组消息时,我会从我的短信提供商那里收到一个网络钩子,里面有 from
作为该人的电话号码和 to []
会包括我的应用号和其他人的号码。
对话的标识符是所涉及的电话号码的唯一组合。
然而,拥有一个数组的 ["1234567890", "1111111111", "2222222222"]
是很难处理的,我希望能在数据库中建立索引并快速找到字符串表示。
如果我有一个 to: ["1234567890", "1111111111", "2222222222]
电话号码的数组,我想使用 Digest::MD5.hexdigest to.sort.to_s
.
这将给我一个独特的标识符,如 49a5a960c5714c2e29dd1a7e7b950741
我可以在我的DB中建立索引,用来唯一地引用对话。
使用MD5哈希来解决我的特定问题有什么问题吗?每当我在对话中涉及到相同的数字时,我希望它能产生相同的哈希值。MD5是否能保证在相同的有序输入下得到相同的结果?
是否有其他方法可以通过参与者来唯一地识别对话?
是的,MD5确实能给你这个保证。除非 有人试图攻击你的系统。创建相撞的MD5哈希是可能的,但绝不会是偶然发生的。
因此,如果在您的情况下,哈希值只会是良性的(即由您的代码创建,而不是由试图发动某种攻击的人创建),那么使用MD5就可以了。
或者你可以改用SHA256而不是MD5,因为MD5没有这个风险。