Что лучший способ состоит в том, чтобы хешировать URL в рубине?

Документы gatsby-image говорят, что пропускают его через реквизит

Означает, что вы можете добавить любое свойство, которое хотите, внутри тега Img. Из-за некоторых внутренних ограничений вы должны использовать атрибут имени JavaScript, а не HTML (т. Е. className вместо class)

Итак:

render={data => <Img fluid={data.placeholderImage.childImageSharp.fluid} className="logo" />}
16
задан Jason Butler 15 September 2008 в 23:18
поделиться

3 ответа

В зависимости от того, сколько времени строка Вы хотели бы Вас, может использовать несколько альтернатив:

require 'digest'
Digest.hexencode('http://foo-bar.com/yay/?foo=bar&a=22')
# "687474703a2f2f666f6f2d6261722e636f6d2f7961792f3f666f6f3d62617226613d3232"

require 'digest/md5'
Digest::MD5.hexdigest('http://foo-bar.com/yay/?foo=bar&a=22')
# "43facc5eb5ce09fd41a6b55dba3fe2fe"

require 'digest/sha1'
Digest::SHA1.hexdigest('http://foo-bar.com/yay/?foo=bar&a=22')
# "2aba83b05dc9c2d9db7e5d34e69787d0a5e28fc5"

require 'digest/sha2'
Digest::SHA2.hexdigest('http://foo-bar.com/yay/?foo=bar&a=22')
# "e78f3d17c1c0f8d8c4f6bd91f175287516ecf78a4027d627ebcacfca822574b2"

Примечание, что это не будет неотгадываемым, Вам, вероятно, придется объединить его с некоторым другим (секретный, но статичный) данные для соления строки:

salt = 'foobar'
Digest::SHA1.hexdigest(salt + 'http://foo-bar.com/yay/?foo=bar&a=22')
# "dbf43aff5e808ae471aa1893c6ec992088219bbb"

Теперь становится намного более трудно генерировать этот хеш для кого-то, кто не знает исходное содержание и не имеет никакого доступа к Вашему источнику.

35
ответ дан 30 November 2019 в 16:37
поделиться

Я также предложил бы смотреть на различные алгоритмы в пространстве имен обзора. Для создания его тяжелее для предположения, а не (или в дополнение к) солящий с секретным паролем можно также использовать точный дамп времени:

require 'digest/md5'
def hash_url(url)
  Digest::MD5.hexdigest("#{Time.now.to_f}--#{url}")
end

, Так как результат любого алгоритма хеширования, как гарантируют, не будет уникален, не забывайте проверять на уникальность своего результата против ранее сгенерированных хешей прежде, чем предположить, что Ваш хеш применим. Использование Time.now делает повторную попытку тривиальной для реализации, так как только необходимо звонить, пока уникальный хеш не сгенерирован.

3
ответ дан 30 November 2019 в 16:37
поделиться

Использование Обзор:: MD5 из стандартной библиотеки Ruby:

Digest::MD5.hexdigest(my_url)
0
ответ дан 30 November 2019 в 16:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: