ruby - with - Каков наилучший способ хэширования URL-адреса в рубине?




url helper rails (2)

Я пишу веб-приложение, которое указывает на внешние ссылки. Я ищу создать непоследовательный, недопустимый идентификатор для каждого документа, который я могу использовать в URL. Я сделал очевидную вещь: рассматривая url как строку и str # crypt на ней, но это, кажется, задыхается от любых не-буквенно-цифровых символов, таких как косые черты, точки и символы подчеркивания.

Любые предложения по наилучшему способу решения этой проблемы?

Благодаря!


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

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"

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


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

Digest::MD5.hexdigest(my_url)




ruby