Ruby/Rails:散列参与者 phone 号码数组以唯一标识 group/MMS 文本对话?

Ruby/Rails: Hashing array of participant phone numbers to uniquely identify a group/MMS text conversation?

虽然我正在使用 Ruby/Rails 来解决这个特定问题,但特定问题并不是 Ruby 独有的。

我正在构建一个可以向多人发送 group/mms 消息,然后在其他人回复时处理这些文本的应用程序。

app会为每条记录分配不同的编号,每条记录可以参与多个群聊。

例如,record_1可以参与与user_1, user_2的对话,但也可以参与与user_2, user_3的单独对话,而record_2可以有与 user_1, user_2.

的单独对话

当我发送消息时,字段类似于:

{
  from: "1234566789",
  to: [
    "1111111111",
    "2222222222",
    ...
  ],
  body: "..."
}

其中 from 是我的应用程序编号,to [] 是对话中涉及的其他所有人的 phone 号码数组。

当其他参与者之一回复群消息时,我会从我的短信提供商那里得到一个网络钩子,其中 from 作为该人的 phone 号码,to [] 将包括我的应用程序编号和其他人的编号。

对话的标识符是所涉及的 phone 个号码的唯一组合。

但是,["1234567890", "1111111111", "2222222222"] 的数组很难处理,我想要一个可以在我的数据库中建立索引并快速找到的字符串表示形式。

如果我有 phone 个数字的 to: ["1234567890", "1111111111", "2222222222] 数组,我正在考虑使用 Digest::MD5.hexdigest to.sort.to_s

这会给我一个唯一标识符,例如 49a5a960c5714c2e29dd1a7e7b950741,我可以在我的数据库中编制索引并用于唯一引用对话。

使用 MD5 散列来解决我的具体问题是否有任何问题?每当我在对话中涉及相同的数字时,我都希望它产生相同的哈希值。 MD5 是否保证相同顺序输入的结果相同?

是否有另一种方法来唯一标识参与者的对话?

是的,MD5 确实可以保证,除非有人试图攻击您的系统。创建冲突的 MD5 哈希是可能的,但它们绝不会偶然发生。

因此,如果在您的情况下哈希只会是良性的(即由您的代码创建,而不是由试图发动某种攻击的人创建),那么使用 MD5 就可以了。

或者您可以改用 SHA256 而不是 MD5,后者没有这种风险。