RubyRails。对参与者电话号码数组进行哈希处理,以唯一识别群组MMS文本对话?

问题描述 投票:0回答:1

虽然我正在使用RubyRails来解决这个特殊的问题,但具体问题并不是Ruby独有的。

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

该应用将为每个记录设置不同的号码,并且每个记录可以参与多个群组对话。

比如说 record_1 可以与 user_1, user_2,但也可以参与单独的对话,与 user_2, user_3record_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是否能保证在相同的有序输入下得到相同的结果?

是否有其他方法可以通过参与者来唯一地识别对话?

ruby-on-rails md5 mms
1个回答
1
投票

是的,MD5确实能给你这个保证。除非 有人试图攻击你的系统。创建相撞的MD5哈希是可能的,但绝不会是偶然发生的。

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

或者你可以改用SHA256而不是MD5,因为MD5没有这个风险。

© www.soinside.com 2019 - 2024. All rights reserved.